特定单词前后的php正则表达式马赫数
我有一个包含如下数据的字符串:特定单词前后的php正则表达式马赫数,php,regex,Php,Regex,我有一个包含如下数据的字符串: $string = ' foo=bar badge_name_foo=foo bar_badge_name=bar bar=baz '; 我想匹配所有*\u badge\u name和badge\u name.*字符串 regex im使用的是: preg\u match\u all(“~(?:(\w+))”徽章名称(?:(\w+))~”,$string,$matches,preg\u SET\u顺序) 结果是: Array (
$string = '
foo=bar
badge_name_foo=foo
bar_badge_name=bar
bar=baz
';
我想匹配所有*\u badge\u name
和badge\u name.*
字符串
regex im使用的是:
preg\u match\u all(“~(?:(\w+))”徽章名称(?:(\w+))~”,$string,$matches,preg\u SET\u顺序)代码>
结果是:
Array
(
[0] => Array
(
[0] => badge_name_foo
[1] =>
[2] => foo
)
[1] => Array
(
[0] => bar_badge_name
[1] => bar
)
)
*\u badge\u name
工作正常,但是badge\u name
上每次都有一个空值?现在,如何使用preg\u match\u all
预期结果应为:
Array
(
[0] => Array
(
[0] => badge_name_foo
[1] => foo
)
[1] => Array
(
[0] => bar_badge_name
[1] => bar
)
)
似乎您需要使用:
在分支重置组内,共享相同的捕获组。语法是(?| regex)
,其中(?|
打开组,regex
是任何正则表达式。如果在分支重置组内不使用任何替换或捕获组,则其特殊功能不会发挥作用。然后,它将充当一个正则表达式
使用
看
:
结果:
Array
(
[0] => Array
(
[0] => badge_name_foo
[1] => bar_badge_name
)
[1] => Array
(
[0] => foo
[1] => bar
)
)
$re = '/(?|(\w+)_badge_name|badge_name_(\w+))/';
$str = 'foo=bar
badge_name_foo=foo
bar_badge_name=bar
bar=baz';
preg_match_all($re, $str, $matches);
print_r($matches);
Array
(
[0] => Array
(
[0] => badge_name_foo
[1] => bar_badge_name
)
[1] => Array
(
[0] => foo
[1] => bar
)
)