Regex захватывает несколько совпадений в каждой строке, которая начинается с выражения - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь захватить каждое слово, следующее за ( или ,, за которым следует $ в строках, начинающихся с function, но у меня возникают проблемы с захватом каждого слова.

Например, в этой строке function f(string $string, int $int1, int $int2, $var, array $array = null) Я хочу захватить string, int, int, array.

Мои попытки включают: [\(,](.+?)\$, function[^\(]*\(([^\$]*)\$[^,]+,([^\$]*)\$ и все вмежду

Я тестирую здесь: https://regex101.com/r/rosWhD/3

PS: цель состоит в том, чтобы написать скрипт для удаления подсказок типа функции php и сделать мое приложение совместимым с php5

1 Ответ

0 голосов
/ 25 сентября 2019

Regex не является подходящим инструментом для работы (это будет синтаксический анализатор языков), но если вы решите использовать его, следующее должно удовлетворить ваши потребности:

(?<=(?:function\s*\w*\()|(?:,\s*))[\w]+(?=\s*\$)

  • (?<=(?:function\s*\w*\()|(?:,\s*)) Утверждение без совпадения, что предыдущая строка содержит function [optional name]( or, `с последующими необязательными пробелами
  • [\w]+ Совпадение некоторых символов слова (но не менее одного) из a-zA-Z_
  • (?=\s*\$) Утверждение без совпадения, что следующая строка содержит необязательные пробелы и буквенный $ символ

Находит набор символов слова (без цифр), которому предшествуетлибо function [optional name]( или ,, за которым следует $.Не будет принимать «типы» с цифрами / пробелами в них, а также не будет соответствовать «типам», за которыми не следует переменная.

Попробуйте здесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...