2016-04-01 4 views
2

Моим текущим регулярным выражение соответствует имени функции и имя переменного передается функции see hereКак матч в паре закрывающей скобки с регулярным выражением

Regex - (file_exists|is_file)\(([^)]+)
струнныхif (is_file($file)){
Матчиis_file и $file

Мне также нужно, чтобы регулярное выражение работало со строкой, а n просто имя переменной. Сюда входят строки с несколькими открывающимися и закрывающимися скобками.

Вот крайний пример.

Regex - (file_exists|is_file)\(????????)
струнныеif (is_file(str_replace(array('olddir'), array('newdir'), strtolower($file))){
Матчиis_file и str_replace(array('olddir'), array('newdir'), strtolower($file)

Есть ли способ, чтобы соответствовать следующей закрывающую скобку, если один не был открыт?

Я хотел бы, чтобы он работал на regex101

+0

Итак, вам нужно регулярное выражение для PHP? Обратите внимание, что нет 'str_replace (array ('olddir'), array ('newdir'), strtolower ($ file)' inside 'if (is_file (str_replace (array(), array(), strtolower ($ file))) {'. –

+0

@ WiktorStribiżew спасибо, это было последнее редактирование. Я использую vqmod, который находит и заменяет файлы php. – TarranJones

+0

Что такое regex flavor then? –

ответ

1

Вы можете использовать регулярное выражение с вызовом подпрограммы в PHP:

'~(file_exists|is_file)(\(((?>[^()]++|(?2))*)\))~' 

Смотрите regex demo

картина совпадает:

  • (file_exists|is_file) - один из двух вариантов
  • (\(((?>[^()]++|(?2))*)\)) - Группа 1 соответствует парным гнездам (...) подстрок, а ((?>[^()]++|(?2))*) - группа 3, захватывающая содержимое внутри внешнего парного (...).

Таким образом, результаты являются:

  • Группа 1: is_file
  • Группа 2: (str_replace(array(), array(), strtolower($file)))
  • Группа 3: str_replace(array(), array(), strtolower($file))

Использование группы 1 и 3.

Смежные вопросы