PHP Regex preg_replace括号之间的多个值
问题描述:
我想用正则表达式来搜索一个字符串,替换几个值并构建一个URL。我从来没有用过正则表达式(从零开始),所以有点卡住了。PHP Regex preg_replace括号之间的多个值
该字符串包含在[方括号内]作为标识符。我已经尝试了多种方法 - 我不明白如何构造正则表达式或preg_replace方法以便能够执行多个替换,理想情况下没有大量重复的正则表达式行,但是这是我尝试的方向:
$string= '[mycode="gallery" type="single" id="1" data="only"]'; //INPUT
$string = preg_replace('/\mycode="(.*)"\]/', '$1/mycode"', $string);
$string = preg_replace('/\type="(.*)"\]/', 'mycode_$1.php', $string);
$string = preg_replace('/\id="(.*)"\]/', '?id=$1', $string);
$string = preg_replace('/\data="(.*)"\]/', '&data=$1', $string);
最终输出:
画廊/ _mycode_single.php ID = 1个&数据=只(与删除[]太)
我知道,这是行不通目前,因为我不?知道编译多行输出的方法;任何援助将不胜感激。谢谢!
答
你将需要去两层,首先拉动[]
之间的所有内容,然后根据需要替换值。您可以使用preg_replace_callback
来完成此操作。
$string= '[mycode="gallery" type="single" id="1" data="only"]';
echo preg_replace_callback('/\[([^\]]+)\]/', function($match) {
$string = preg_replace('/\h*mycode="([^"]+)"\h*/', '$1/mycode', $match[1]);
$string = preg_replace('/\h*type="([^"]+)"\h*/', 'mycode_$1.php', $string);
$string = preg_replace('/\h*id="([^"]+)"\h*/', '?id=$1', $string);
$string = preg_replace('/\h*data="([^"]+)"\h*/', '&data=$1', $string);
return $string;
}, $string);
你的正则表达式没几个原因工作:
- 您的字符串不与正则表达式逃逸
]
- 反斜线结束或创建元字符,
\d
是一个数字\t
是一个标签。 - 如果建立一个网址,你不希望在返回值双引号
- 您还需要修剪的前导和尾部空格
+0
非常感谢 - 您的解决方案完美无缺! – WWD
对不起,是 - ]我认为我之前的努力遗留下了一个错字。我之前没有使用preg_replace_callback - 你能详细说明吗?我假设你的意思是在做其他事情之前先使用它来获取[]括号中的内容? – WWD
使用下面提供的答案工作 - 再次感谢 – WWD