【发布时间】:2021-03-15 16:27:18
【问题描述】:
我正在尝试找到一个能够捕获 Wordpress 中生成的短代码内容的正则表达式。
我的短代码具有以下结构: [短代码名称 param1="value1" param2="value2" param3="value3"]
参数的数量是可变的。
我需要捕获短代码名称、参数名称及其值。
我取得的最接近的结果是这样的:
/(?:\[(.*?)|\G(?!^))(?=[^][]*])\h+([^\s=]+)="([^\s"]+)"/
如果我在同一个字符串中有以下内容:
[specs product="test" category="body"]
[pricelist keyword="216"]
[specs product="test2" category="network"]
我明白了:
0=>array(
0=>[specs product="test"
1=> category="body"
2=>[pricelist keyword="216"
3=>[specs product="test2"
4=> category="network")
1=>array(
0=>specs
1=>
2=>pricelist
3=>specs
4=>)
2=>array(
0=>product
1=>category
2=>keyword
3=>product
4=>category)
3=>array(
0=>test
1=>body
2=>216
3=>test2
4=>network)
)
我尝试了不同的正则表达式模型,但我总是遇到同样的问题,如果我有多个参数,它就无法检测到它。
你知道我是如何做到这一点的吗?
谢谢 洛朗
【问题讨论】:
-
您期望的 exact 数组输出是什么?
-
但它确实匹配了您想要的所有部分,对吧? regex101.com/r/v8l4X9/1
-
@Laurent 我写了一个模式的变体3v4l.org/6FbEO 或者你的意思是第一个子数组中只有两个条目?
-
@Laurent 也许您可以使用 3 个数组,其中第一个具有短代码名称,第二个和第三个具有键和值。 3v4l.org/RdRro
-
@Thefourthbird 啊,那很好,你说得对,我可能应该寻找这种替代方案,而不是最终得到一个不可读的正则表达式。我试试看!
标签: php preg-match-all