【发布时间】:2016-03-03 17:07:55
【问题描述】:
我编写了一个正则表达式,它应该解析给定的内容并返回一个匹配数组。 preg_match函数如下:
<?php preg_match("/\[tab *title=(\”|\"|\’|\'|).*(\”|\"|\’|\'|)\]/i", $content, $tabs); ?>
根据RegExr,这可以很好地匹配以下任何(或变体):
[tab title="example"]
[tab title="example"]
[tab title='example']
[tab title=example]
[TAB TITLE="example"]
[tab title=”example”]
[tab title=’example’]
我可以让我的 preg_match 返回一个数组,但它只显示第一个匹配项:
Array
(
[0] => [tab title=’Admission’]
[1] =>
[2] =>
)
我对正则表达式很陌生,这是我第一次尝试自己做。我确定我遗漏了一些明显的东西。为什么这个数组只显示第一个匹配项?
我试图解析的示例数据如下:
[tab-group]
[tab title='Admission']
Tab Content Here
[/tab]
[tab title="Amenities"]
Tab Content Here
[/tab]
[tab title="Season Passes"]
Tab Content Here
[/tab]
[tab title="Hours"]
Tab Content Here
[/tab]
[/tab-group]
更新:我刚刚找到preg_match_all,它似乎匹配正确,只是由于某种原因它在末尾添加了两个额外的数组:
Array
(
[0] => Array
(
[0] => [tab title=’Admission’]
[1] => [tab title=”Amenities”]
[2] => [tab title=”Season Passes”]
[3] => [tab title=”Hours”]
)
[1] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
)
[2] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
)
)
根据我的示例数据,是否清楚为什么要添加这些数组?
【问题讨论】:
-
preg_match_all(): php.net/manual/en/function.preg-match-all.php
-
谢谢,我刚刚在另一个问题中看到并尝试了。它似乎确实有效,但有一个问题。在 30 秒内更新问题。
-
阅读我提供的php.net页面,它解释了matches[0]、matches[1]...matches[n]包含什么以及为什么...
-
额外的数组用于括号中的捕获组。如果您不想返回它们,请使用带有
(?:...)的非捕获组@ -
另外,您可以在群组中使用
[xyz],而不是(x|y|z)。
标签: php regex preg-match