1

我是一个学习PHP的初学者。我正在尝试使用正则表达式的各种组合。我指的是thisthis并尝试有关this的示例。

我的疑惑:

  1. 为什么preg_match_all('((a|b)*c)', 'ababc', $arr, PREG_PATTERN_ORDER);同时给出ababaca作为输出。不应该只是ababac吗?

  2. 假设我正在尝试读取所有可能的输出$arr,我该如何做到这一点而不必回显数组的每个元素?目前,我正在使用foreach迭代$arr. 这是正确的/有更好的方法吗?

  3. 为什么要preg_match_all()给出一个带有元素的二维数组,$arr[$i][0]并且在某些情况$arr[0][$i]$i没有可能的匹配项。有没有办法知道输出将如何存储?

很抱歉在一篇文章中发布了太多问题。请告诉我是否需要更改它。

4

1 回答 1

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

  2. foreach可能是最好的方法。

  3. 如 1 中所述,您将在数组中捕获并返回您的子模式。

您可能需要查看preg_replace_callback(),因为这会将给定的回调(通常是匿名函数)应用于每个匹配项。

于 2013-04-06T23:29:21.010 回答