正则表达式 - PHP外观

时间:2010-03-09 19:10:08

标签: php regex preg-match-all

我有一个字符串,例如:

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

我知道这是一个奇怪的字符串,但请跟我一起:P

我需要一个正则表达式来查找__之间的内容(“在这里查找内容”) 并把它放在一个数组中。

即。正则表达式会找到“你好吗”和“非常好,谢谢你”。

2 个答案:

答案 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)