2009-11-12 2 views
1

У меня есть следующие строки:регулярное выражение, чтобы захватить цитируемый текст в PHP код

<?php echo $this->__("mytext");?>somesometext")moretext 

и мне нужно регулярное выражение, чтобы захватить «MYTEXT». Лучшее, что я мог придумать это:

/\$this->__\([\'"](.*)[\'"]\)/ 

, но в этом случае она возвращает:

mytext");?>somesometext 

Можно ли получить эту работу?

+0

Что может быть «mytext»? Может ли он содержать экранированные двойные кавычки следующим образом: ' __ (" my \ "text");?> Somesometext ") moretext'? –

+0

@Bart Да, он может иметь все, что вы могли бы передать функции как строку. –

ответ

2
/\$this->__\([\'"](.*?)[\'"]\)/ 

? делает * кванторное ungreedy.

+0

Ответы обоих и Стефана верны. Выбрал тот, который нуждался в репутации больше всего. –

2
/\$this->__\([\'"](.*?)[\'"]\)/ 

должно работать. ? переключает режим совпадения на ungreedy.

3

Лучше использовать способность PHP анализировать свой собственный код с помощью token_get_all, пропустить маркеры и остановиться на первом T_CONSTANT_ENCAPSED_STRING token.

+0

Несмотря на то, что для моего приложения нецелесообразно, +1 для использования мощности PHP-токенизатора. –

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