我编写的用于匹配 PHP 中的短代码的正则表达式有问题。
这是模式,其中$shortcode
是短代码的名称:
\[$shortcode(.+?)?\](?:(.+?)?\[\/$shortcode\])?
现在,这个正则表达式对于这些格式表现得非常好:
[shortcode]
[shortcode=value]
[shortcode key=value]
[shortcode=value]Text[/shortcode]
[shortcode key1=value1 key2=value2]Text[shortcode]
但最常见的格式好像有问题,
[shortcode]Text[/shortcode]
它返回匹配以下内容:
Array
(
[0] => [shortcode]Text[/shortcode]
[1] => ]Text[/shortcode
)
正如您所看到的,第二个匹配项(应该是文本,因为第一个匹配项是可选的)包括开始标记的末尾以及除最后一个括号之外的所有结束标记。
EDIT:发现返回的match是第一次捕获,不是第二个。请参阅 Regexr 中的正则表达式。 http://regexr.com?31euk
你能帮忙吗?我真的为这件事伤透了脑筋。
在你的正则表达式中:
\[$shortcode(.+?)?\](?:(.+?)?\[\/$shortcode\])?
第一个捕获组(.+?)
匹配至少 1 个字符。
整个组是可选的,但在这种情况下,它恰好匹配直到最后一个的所有内容]
.
以下正则表达式有效:
\[$shortcode(.*?)?\](?:(.+?)?\[\/$shortcode\])?
The *
量词表示 0 或更多,而+
表示一个或多个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)