почему регуляное выражение не работат в скобках?

Тема в разделе "Регулярные выражения", создана пользователем autos, 17 фев 2020.

  1. autos

    autos

    Регистр.:
    14 июл 2007
    Сообщения:
    201
    Симпатии:
    55
    есть строка, в скобках может быть разное количество параметров
    $str = 'function(6a, 1)';
    $str = 'function(6a, 1, 100n)';

    нужены только параметры в скобках, такой вариант работает
    preg_match_all('#\((.+?)\)#', $str, $param);

    print_r($param); //Array ( [0] => (6a, 1) )

    но нужны из символов только буквы и цифры ( и запятая)

    почему тогда не работают такие варианты?
    preg_match_all('#\((\w+)\)#', $str, $param); //Array ( )

    preg_match_all('#\(([a-z0-9\,]+)\)#', $str, $param); //Array ( )
     
  2. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    386
    Симпатии:
    139
    Потому что:
    1) \w+ = a-zA-Z0-9\_ => а у тебя ещё есть запятые и пробелы в строке поиска
    2) [a-z0-9\,]+ => у тебя есть пробелы в строке поиска
    тебе ещё нужно добавить к регуляркам пробельные символы
    Код:
    1) preg_match_all('#\(([\w\s\,]+)\)#', $str, $param);
    2) preg_match_all('#\(([a-z0-9\,\s]+)\)#', $str, $param);
    
     
    autos нравится это.
  3. garphild

    garphild Создатель

    Регистр.:
    19 май 2009
    Сообщения:
    43
    Симпатии:
    14
    Ну и еще бы ui добавить, раз уж ограничения идут только маленькими буквами. А то camelCase не будет и также нужно добавить нижнее подчеркивание. Как вариант именования параметров. Главное чтоб в параметре не попались арифметические и прочие операции. Типа
    Код:
    func(a+b, 22,iWinner(Winter_sport))
    .