У меня есть строка, например:
$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)