Попробуйте это:
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
EDIT
И, как упоминал Грег: кто-то, кто не слишком знаком с осмотрами, может быть более читабельным, если их пропустить. Затем вы сопоставляете все: __("
, string и ")
и заключаете регулярное выражение, соответствующее string , .*?
, в круглые скобки, чтобы захватывать только эти символы. Затем вам нужно будет получить свои спички, хотя $matches[1]
. Демо:
preg_match_all('/__\("(.*?)"\)/', $foo, $matches);
print_r($matches[1]);