2013-12-02 3 views
0

Используя следующее регулярное выражение в PHP, я могу отфильтровать строки из наших файлов приложений, которые выглядят как __ ('test string'), для целей перевода.Regex, который фиксирует одиночные/двойные кавычки и скобки

preg_match_all('/__\((?:(?:[\"]([^\"\)]*?)[\"](?:,[^\)]*)?)|(?:[\']([^\'\)]*?)[\'](?:,[^\)]*)?))\)/', $contents, $matches) 

Однако я застрял выяснить, как захватить строк, которые содержат скобка себя, не нарушая способность анализировать строки, которые имеют как одинарные (') и двойные (") кавычки.

В этом пример в RegExr gSkinner показывает вопрос:?. http://gskinner.com/RegExr/?35joj

Anybody там ощущение, как регулярное выражение ниндзя сегодня Спасибо заранее Кроме того, Ого, первый пост

+0

Я уверен, что вам понадобится [рекурсивное регулярное выражение] (http://www.regular-expressions.info/recurse.html). – Rob

+0

Альтернативно [токенизатор] (http://www.php.net/manual/en/ref.tokenizer.php). Хотя регулярное выражение является достаточным, если вам нужно только соответствовать константным строкам, а не строковым выражениям (и даже тогда может быть более кратким с регулярным выражением). – mario

ответ

1

Это следует сделать это:.. __\(('|")[^__]+('|")\)

+0

Это сломается, когда есть более одного '__()', потому что оно будет соответствовать всем между первым открытием и последним закрытием. – Rob

+0

К сожалению, существует множество строк для обнаружения и записи в файл. – user3058773

+0

Отредактировано, попробуйте. – bagonyi

0

Я думаю, что вы на правильном пути.

# "/__\\((?:\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*')\\)/" 


__\(
(?: 
     " [^"\\]* (?: \\ . [^"\\]*)* " 
    | 
     ' [^'\\]* (?: \\ . [^'\\]*)* ' 
) 
\) 
Смежные вопросы