2012-03-29 2 views
1

Мне нужно регулярное выражение, чтобы найти вызовы функций в строках в php, я пытался искать здесь в stackoverflow, но ни один из тех, которые я пробовал, работал.Regex найти вызов функции php

этот шаблон: ^.*([\w][\(].*[\)])

Это будет соответствовать: functionone(fgfg), но и functionone(fgfg) dhgfghfgh functiontwo(), как один матч. Не 2 отдельные матчи (как в functionone(fgfg) и functiontwo().

Я не знаю, как писать, но я думаю, что это то, что мне нужно.
1. Любая строка, а затем (
2. Любой строка с последующим )

И тогда он должен остановиться, не продолжать. Есть регулярное выражение-гуру, которые могут помочь мне?

+0

Вместо этого *, который жадный оператор, попробуйте использовать. * ?, который ленив. – ddinchev

+2

см. Здесь: http://www.php.net/manual/en/function.get-defined-functions.php – diEcho

+0

Получайте удовольствие от $ x = functionOne (functionTwo ("fgfg")); и все мириады аналогичных перестановок –

ответ

4

я вижу 5 вопросов с регулярным выражением

  1. Если вы хотите, чтобы соответствовать 2 функции в одной строке, а не использовать якорь ^, это якорь регулярного выражения к началу строки.

  2. Тогда вам не нужно .* в начале может быть больше что-то вроде \w+ (я не уверен, что спецификации имени функции в РНР)

  3. , если имеется только одна запись в характере класс (и его не отрицательный), вам не нужен класс символов

  4. Квантор между скобками должен быть ленивым (за ним следует ?). Таким образом, после этого 4 балла ваше регулярное выражение будет выглядеть примерно так

    \w+\(.*?\) 
    
  5. регулярное выражение действительно правильный инструмент для этой работы?

+0

Это действительно сработало, большое спасибо! Но с тобой все в порядке. Tokenizer был бы лучшей альтернативой, но он не нашел мои функции в качестве функций, а как html. – jocken

5

не следует использовать регулярное выражение для этого ... использовать PHP встроенный в tokenizer

1

Функциональная подпись не является обычным языком. Таким образом, вы не можете использовать регулярное выражение для соответствия сигнатуре функции. Ваше текущее регулярное выражение будет соответствовать подписям, которые НЕ являются действительными сигнатурами функций.

Что я предлагаю вам использовать, является токенизатором PHP.

+1

Действительная точка, неверный аргумент, [PCRE не является регулярным] (http://stackoverflow.com/questions/7434272/match-an-bn-cn-eg-aaabbbccc-using-regular-expressions -pcre). – Qtax

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