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

autos

Гуру форума
Регистрация
14 Июл 2007
Сообщения
202
Реакции
56
есть строка, в скобках может быть разное количество параметров
$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 ( )
 

UJy

Постоялец
Регистрация
23 Авг 2011
Сообщения
385
Реакции
146
почему тогда не работают такие варианты?
preg_match_all('#\((\w+)\)#', $str, $param); //Array ( )
preg_match_all('#\(([a-z0-9\,]+)\)#', $str, $param); //Array ( )
Потому что:
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);
 

garphild

Постоялец
Регистрация
19 Май 2009
Сообщения
60
Реакции
31
Потому что:
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);

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