Regex для вызова функции?

Я хочу просто вытащить какой-то цитируемый текст из вызова функции и задавался вопросом, могу ли я получить некоторую помощь с регулярным выражением?

Строка будет выглядеть примерно так: «MyFunction (« MyStringArg »);

Я, по сути, хотел бы сканировать файл для любых строк, которые вызывают «MyFunction», а затем фиксирует строковый литерал внутри кавычек.

Последующий вопрос
Как я могу избежать комментариев с этим?

Обновить
Я смог решить свою проблему:
MyFunction\s*\(\s*"(.*?)\"\s*\)\s*;

Спасибо @devyndraen и всем за вашу помощь!

Я не уверен, какие требования к форматированию у вас есть, поэтому я включил в себя предположение, что в нормальных местах программирования может быть какое-то место в пространстве.

Полученная строка будет в \ 1 обратном направлении.

 MyFunction\s*\(\s*"(.*?)\"\s*\)\s*; 

http://rubular.com/r/qVsaqJS6gJ

Я бы предложил это не-жадное регулярное выражение с флагом s (DOTALL в Java) (если в круглой скобке этого вызова функции нет комментариев:

 $regex = '/MyFunction.*?\(.*?"(.*?)".*?\).*?;/s'; 

Если вы используете preg_match($regex, $str, $matches) то аргумент будет доступен в $matches[1] .

Чтобы компенсировать прокомментированные строки или блоки, сначала нужно отфильтровать файл, чтобы удалить все комментарии перед применением регулярного выражения. Для PHP вы можете использовать следующее:

 $example=' line 1 line 2 // comment 1 line 3 # comment 2 // comment 3.1 # comment 3.2 /* comment 4.1 comment 4.2 */ line 9 /* comment 5.1 comment 5.2 */'; echo '<h3>Example Text</h3><pre>'.$example.'</pre><hr>'; $regex='/ (?x) (?: # single-line inline comments beginning at col#1 (?s) (?:\\/\\/|\\#) [^\\n]+ \\n | # single-line inline comments beginning after col#1 # preserve leading content (?m) ^ (.+?) (?:\\/\\/|\\#) .*? $ | # multi-line comments (?s) \\/ \\* (?:.|\\n)*? \\* \\/ ) /x'; echo '<h3>Regular Expression</h3><pre>'.$regex.'</pre><hr>'; $result=preg_replace( $regex, '$1', $example); echo '<h3>Result</h3><pre>'.$result.'</pre><hr>'; 

который производит:


Пример текста

 линия 1
 строка 2 // комментарий 1
 строка 3 # комментарий 2
 // комментарий 3.1
 # комментарий 3.2
 / *
    комментарий 4.1
    комментарий 4.2
 * /
 строка 9 / * комментарий 5.1
 комментарий 5.2
 * /

Регулярное выражение

 /
     (?Икс)
     (?:
         # однострочные строчные комментарии, начинающиеся с col # 1
         (? S)
         (?: \ / \ / | \ #)
         [^ \ П] +
         \ п
     |
         # однострочные строчные комментарии, начинающиеся после col # 1 
         # сохранить ведущий контент
         (? М)
         ^
         (. +?)
         (?: \ / \ / | \ #)
         . *?
         $
     |
         # многострочные комментарии
         (? S)
         \ /
         \ *
             (?: |. \ П) *?
         \ *
         \ /
     )
 /Икс

результат

 линия 1
 строка 2 
 строка 3 

 строка 9
 [^(]*("([^"]*)") 

а затем группа номер 1 будет строкой в ​​кавычках. Вы должны будете снова зачислить его сами.

(это не очень научно, так как в нем, вероятно, найдутся некоторые вещи, которые вы не хотите)