Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特定单词前后的php正则表达式马赫数_Php_Regex - Fatal编程技术网

特定单词前后的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
        )

)