如何匹配 php 正则表达式中字符串上的所有 @__('...')?
How to match all @__('...') on string in php regex?
我有以下字符串,需要匹配字符串中的所有 @__('...')
或 @__("...")
。
$string = <<<EOD
@__('test1') @__('test2 (foo)') @__('test\'3') @__("test4")
@__('test5')
EOD;
预期:
test1
test2 (foo)
test\'3
test4
test5
尝试了一些模式:
只有一行中只有一个目标字符串时,此模式才能匹配:
preg_match_all("/@__\([\'\"](.+)[\'\"]\)/", $string, $matches);
dd($matches);
array:2 [▼
0 => "test1') @__('test2 (foo)') @__('test\'3') @__("test4"
1 => "test5"
]
以下无法匹配包含)
的字符串:
preg_match_all("/@__\(['|\"]([^\'][^\)]+)['|\"]\)/", $string, $matches);
dd($matches);
array:4 [▼
0 => "test1"
1 => "test\'3"
2 => "test4"
3 => "test5"
]
提前致谢。
我找到了解决方法,只需在.+
之后添加?
:
preg_match_all("/@__\([\'\"](.+?)[\'\"]\)/", $string, $matches);
谢谢巴尔马尔
Use a non-greedy quantifier so you get the shortest match, not the
longest match.
我有以下字符串,需要匹配字符串中的所有 @__('...')
或 @__("...")
。
$string = <<<EOD
@__('test1') @__('test2 (foo)') @__('test\'3') @__("test4")
@__('test5')
EOD;
预期:
test1
test2 (foo)
test\'3
test4
test5
尝试了一些模式:
只有一行中只有一个目标字符串时,此模式才能匹配:
preg_match_all("/@__\([\'\"](.+)[\'\"]\)/", $string, $matches);
dd($matches);
array:2 [▼
0 => "test1') @__('test2 (foo)') @__('test\'3') @__("test4"
1 => "test5"
]
以下无法匹配包含)
的字符串:
preg_match_all("/@__\(['|\"]([^\'][^\)]+)['|\"]\)/", $string, $matches);
dd($matches);
array:4 [▼
0 => "test1"
1 => "test\'3"
2 => "test4"
3 => "test5"
]
提前致谢。
我找到了解决方法,只需在.+
之后添加?
:
preg_match_all("/@__\([\'\"](.+?)[\'\"]\)/", $string, $matches);
谢谢巴尔马尔
Use a non-greedy quantifier so you get the shortest match, not the longest match.