我已经写了一个正则表达式,可以解析给定的内容并返回一个匹配数组。该preg_match
功能如下:
<?php preg_match("/\[tab *title=(\”|\"|\’|\'|).*(\”|\"|\’|\'|)\]/i", $content, $tabs); ?>
[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] =>
)
我是regex的新手,这是我第一次尝试自己做。我确定我缺少明显的东西。为什么此数组仅显示第一个匹配项?
我尝试解析的示例数据如下:
[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("/\[tab *title=[”\"’']?.*[”\"’']?\]/i", $content, $tabs);
放在?
字符集之后使其成为可选字符,因此它也将与空字符串匹配,就像组中的最后一个替代字符一样。
但是在周围有一个可选字符并没有多大意义.*
。它将与以下内容匹配title=.*
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句