大佬教程收集整理的这篇文章主要介绍了PHP - Preg Match All - Wordpress 多个带有多个参数的短代码,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试找到一个能够捕获 wordpress 中生成的短代码内容的正则表达式。
我的短代码具有以下结构: [简码名称 param1="value1" param2="value2" param3="value3"]
参数的数量是可变的。
我需要捕获短代码名称、参数名称及其值。
我取得的最接近的结果是这样的:
C:\Users\Myname\ApPDAta\Local\Programs\Python\python38-32\python.exe
如果我在同一个字符串中有以下内容:
/(?:\[(.*?)|\G(?!^))(?=[^][]*])\h+([^\s=]+)="([^\s"]+)"/
我明白了:
[specs product="test" category="body"]
[priceList keyword="216"]
[specs product="test2" category="network"]
我尝试了不同的正则表达式模型,但我总是遇到同样的问题,如果我有多个参数,则无法检测到它。
你知道我是如何做到这一点的吗?
谢谢 洛朗
您可以使用 \G
锚点使用 3 个捕获组,其中捕获组 1 是短代码的名称,组 2 和 3 是键值对。
然后可以删除数组的第一个条目,并删除第一个、第二个和第三个条目中的空条目。
这是一个稍微更新的模式
(?:\[(?=[^][]*])(\w+)|\G(?!^))\h+(\w+)="([^"]+)"
Regex demo | php demo
示例
$s = '[specs product="test" category="body"]';
$pattern = '/(?:\[(?=[^][]*])(\w+)|\G(?!^))\h+(\w+)="([^"]+)"/';
$Strings = [
'[specs product="test" category="body"]','[pricelist keyword="216"]','[specs product="test2" category="network" key="value"]'
];
foreach($Strings as $s) {
if (preg_match_all($pattern,$s,$matches)) {
unset($matches[0]);
$matches = array_map('array_filter',$matches);
print_r($matches);
}
}
输出
Array
(
[1] => Array
(
[0] => specs
)
[2] => Array
(
[0] => product
[1] => category
)
[3] => Array
(
[0] => test
[1] => body
)
)
Array
(
[1] => Array
(
[0] => pricelist
)
[2] => Array
(
[0] => keyword
)
[3] => Array
(
[0] => 216
)
)
Array
(
[1] => Array
(
[0] => specs
)
[2] => Array
(
[0] => product
[1] => category
[2] => key
)
[3] => Array
(
[0] => test2
[1] => network
[2] => value
)
)
以上是大佬教程为你收集整理的PHP - Preg Match All - Wordpress 多个带有多个参数的短代码全部内容,希望文章能够帮你解决PHP - Preg Match All - Wordpress 多个带有多个参数的短代码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。