PHP正则表达式查找包含在“字符串”中的字符串(“字符串”到“提取”)

PHP正则表达式查找包含在“字符串”中的字符串(“字符串”到“提取”),php,regex,Php,Regex,对不起,我的regexp真的很烂。我需要收集应用程序中包含在本例中的所有字符串:\字符串也可以包含在单引号中 我使用以下代码进行了尝试: $str = "__('match1') __("match2") do_not_include __('match3')"; preg_match_all("/__\(['\"](.*)['\"]\)/", $str, $matches); var_dump($matches); 但它只能用1个匹配项匹配整行字符串。下面是示例结果。请帮助我编辑regex

对不起,我的regexp真的很烂。我需要收集应用程序中包含在本例中的所有字符串:\字符串也可以包含在单引号中

我使用以下代码进行了尝试:

$str = "__('match1') __("match2") do_not_include __('match3')";

preg_match_all("/__\(['\"](.*)['\"]\)/", $str, $matches);
var_dump($matches);
但它只能用1个匹配项匹配整行字符串。下面是示例结果。请帮助我编辑regexp,以便它能够获得3个匹配项

match1') __("match2") do_not_include __('match3
提前感谢您的帮助。

您可以使用:

$str = "__('match1') __(\"match2\") do_not_include __('match3')";
preg_match_all('/__\(([\'"])(.*?)\1\)/', $str, $matches);
print_r($matches[2]);
([\'”])
将匹配单引号或双引号,并将其捕获到组1中

*?
将匹配0个或更多字符(非贪婪)

\1
是上述捕获组的反向引用,以确保字符串在RHS上以相同的引号关闭

输出:

Array
(
    [0] => match1
    [1] => match2
    [2] => match3
)

你好,阿努巴瓦,谢谢你的帮助。但是你给出的模式似乎仍然缺少一些东西,因为它只能捕捉第一场比赛。最重要的是:懒惰的“*?”阻止了以第一场开始(“以最后一场结束”)的比赛“我只需要在模式中添加/g。谢谢你的帮助,阿努巴瓦@约翰加西亚:您的演示中缺少
g
(全局)标志。如果您使用preg_match_all(如@anubhava所做的),则不需要“g”