Intereting Posts
Разница между $ _SERVER и $ _SERVER JSON против Serialized Array в базе данных нажатие на ссылку должно отображать результат на той же странице. Кнопка BACK и REFRESH должна работать нормально Как Zend DB управляет подключениями к базе данных Если isset для нескольких кнопок отправки Как сделать субдомен на моем локальном хосте? Как получить доступ к PHP с командной строкой в ​​Windows? вставить в базу данных MySQL на другом сервере Изменения CodeIgniter, расширяющие драйверы баз данных для их использования с запросами UNION рассчитать варианты продукта на основе групп опций и опций Как точно знать, будет ли FastCGI использоваться для запуска скриптов php веб-браузер не обрабатывает PHP-код как PHP-код Как создать ответ электронной почты / метод, чтобы закодировать ответ? PHP-текстовая проблема Как найти только «новые» сообщения при использовании функций IMAP PHP для почтового ящика POP3?

Regex – PHP Lookaround

У меня есть строка, например:

$foo = 'Hello __("How are you") I am __("very good thank you")' 

Я знаю, что это странная строка, но оставайтесь со мной, пожалуйста: P

Мне нужно выражение регулярного выражения, которое будет искать содержимое между __ («Ищите контент здесь») и поместите его в массив.

т.е. регулярное выражение найдет «Как ты» и «очень хорошо спасибо».

Попробуй это:

 preg_match_all('/(?<=__\(").*?(?="\))/s', $foo, $matches); print_r($matches); 

что значит:

 (?<= # start positive look behind __\(" # match the characters '__("' ) # end positive look behind .*? # match any character and repeat it zero or more times, reluctantly (?= # start positive look ahead "\) # match the characters '")' ) # end positive look ahead 

РЕДАКТИРОВАТЬ

И как сказал Грег: кто-то, не слишком хорошо знакомый с обходами, может быть более читаемым, чтобы оставить их. Затем вы можете сопоставить все: __(" , строка и ") и обернуть регулярное выражение, соответствующее строке,. .*? , внутри круглых скобок для захвата только этих символов. Затем вам нужно будет получить свои матчи, хотя $matches[1] . Демонстрация:

 preg_match_all('/__\("(.*?)"\)/', $foo, $matches); print_r($matches[1]); 

Если вы хотите использовать предложение Гумбо, кредит идет ему по шаблону:

 $foo = 'Hello __("How are you")I am __("very good thank you")'; preg_match_all('/__\("([^"]*)"\)/', $foo, $matches); 

Не забудьте использовать $matches[1] для ваших результатов, если вы не хотите получить полный результат строки.

var_dump() из $matches :

 array 0 => array 0 => string '__("How are you")' (length=16) 1 => string '__("very good thank you")' (length=25) 1 => array 0 => string 'How are you' (length=10) 1 => string 'very good thank you' (length=19)