PHP正则表达式示例
我是一个学习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][
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
可能是最好的方法您可能需要研究一下,因为这将对每个匹配应用一个给定的回调函数(通常是匿名函数)。让我们从第一个开始:您能把
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呢?因为重复的子模式只返回最后一个。