我有一个字符串,例如:
$foo = 'Hello __("How are you") I am __("very good thank you")'
我知道这是一个奇怪的字符串,但请跟我一起:P
我需要一个正则表达式来查找__之间的内容(“在这里查找内容”) 并把它放在一个数组中。
即。正则表达式会找到“你好吗”和“非常好,谢谢你”。
答案 0 :(得分:7)
试试这个:
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]);
答案 1 :(得分:2)
如果你想使用Gumbo的建议,可以归功于他的模式:
$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)