Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.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_Preg Match All_Capture Group - Fatal编程技术网

PHP正则表达式示例

PHP正则表达式示例,php,regex,preg-match-all,capture-group,Php,Regex,Preg Match All,Capture Group,我是一个学习PHP的初学者。我正在尝试各种与正则表达式的组合。我指的是和尝试的例子 我的疑问是: 为什么preg_匹配所有('((a | b)*c)'ababc',$arr,preg_模式顺序)将ababac和a作为输出。它不应该是ababac吗 假设我正在尝试读取$arr中所有可能的输出,那么如何在不必回显数组的每个元素的情况下读取这些输出呢?目前,我正在使用foreach迭代$arr中的元素。这是对的/有更好的方法吗 为什么preg_match_all()会给出一个包含元素$arr[$i][

我是一个学习PHP的初学者。我正在尝试各种与正则表达式的组合。我指的是和尝试的例子

我的疑问是:

  • 为什么
    preg_匹配所有('((a | b)*c)'ababc',$arr,preg_模式顺序)
    ababac
    a
    作为输出。它不应该是ababac吗

  • 假设我正在尝试读取
    $arr
    中所有可能的输出,那么如何在不必回显数组的每个元素的情况下读取这些输出呢?目前,我正在使用
    foreach
    迭代
    $arr
    中的元素。这是对的/有更好的方法吗

  • 为什么
    preg_match_all()
    会给出一个包含元素
    $arr[$i][0]
    的2D数组,在某些情况下
    $arr[0][$i]
    中,
    $i
    没有可能的匹配项。有没有办法知道输出将如何存储

  • 很抱歉在一篇文章中发布了太多问题。如果我需要换,请告诉我

  • (a | b)
    是捕获的子模式,因此它作为结果数组的一部分返回。您可以使用
    (?:a | b)
    使其不捕获,但作为字符类,
    [ab]
    会更好

  • foreach
    可能是最好的方法

  • 如1所述,您将在数组中捕获并返回子模式


  • 您可能需要研究一下,因为这将对每个匹配应用一个给定的回调函数(通常是匿名函数)。

    让我们从第一个开始:您能把
    var\u dump($arr)
    放入我们看到的吗?echo var\u dump($arr);给我数组(1){[0]=>array(2){[0]=>string(6)“abababac”[1]=>string(1)“a”}对不起,我没有得到?:部分。什么意思?我知道?表示0或一个字符。@PRamesh:非捕获组。您不需要获得与
    ()
    中的模式匹配的文本,您只需要分组属性,因此非捕获组
    (?:模式)
    就是您想要的。“我知道?表示0或一个字符”就像说“我知道
    I
    表示“我”,那么“in”表示什么呢?@nhahdh-好的。但是,如果(a | b)作为子模式计算,为什么不返回b呢?因为重复的子模式只返回最后一个。