Как сопоставить строку типа *RandomName($variable1, $variable2)
Некоторые ограничения:
** должен быть одним из 0-9, A-Z, a-z, _0-9, A-Z, a-z, _, $)( и одна скобка ).Некоторые примеры строк для сопоставления
*RandomName($variable1, $variable2)*RandomName()*_RandomName($variable1)*123RandomName($variable1, $variable2, $variable3, $variable4)Вот что у меня есть до сих пор
(^|\s)\*([^;!@#*\[\]{}^|+=:<>"',.~\\&%$-]\S{2,200})\b
Вот ссылка для проверки: https://regex101.com/r/FxHz7n/1/
Действительно ли необходим большой отрицательный набор символов? Похоже, вы могли бы использовать \w вместо этого
Из ваших примеров видно, что все имена переменных должны начинаться с $. Должно ли это быть указано как ограничение?
@WiktorStribiżew спасибо, сработало. Добавьте это как ответ, чтобы я мог его принять.
@jsheeran Я проверяю это ограничение с помощью кодирования. Так что это будет не нужно.





Вы можете использовать
(?:^|\s)\*(\w[\w$]*)\(([^()]*)\)
См. демонстрация регулярных выражений и график регулярных выражений:
Подробности
(?:^|\s) - начало строки или пробела (можно заменить на (?<!\S), если просмотр назад принимается)\* - * символ(\w[\w$]*) - Группа 1: слово символ, а затем 0+ слово или $ символы\( - а (([^()]*) - Группа 2: любые 0 или более символов, кроме ( и )\) - символ ).Простым решением будет:
\*[A-z0-9_]+\([A-z0-9_$, ]*\)
или если вы делаете всю строку/точное соответствие:
^\*[A-z0-9_]+\([A-z0-9_$, ]*\)$
Если у вас есть следующая строка:
*RandomName($variabl)e1, $variable2)
Первое регулярное выражение будет соответствовать части *RandomName($variabl), второе в этом случае не будет соответствовать ничему.
Это тоже рабочее решение. Я принял другой ответ, так как он был опубликован первым.
@RahulRavindran Принимайте ответы, основываясь на качестве и краткости информации, а не на том, кто опубликовал ее первым. Концепция принятого ответа используется для выделения «лучшего» данного решения проблемы, и это полезно для других участников, столкнувшихся с той же проблемой. Это просто общее замечание, я не говорю вам принять мой ответ.
Попробуйте
(?:^|\s)\*(\w[\w$]*)\(([^()]*)\), см. regex101.com/r/gukfml/2