我正在尝试使用正则表达式搜索字符串,替换多个值并构建URL。我从来没有使用正则表达式(从头开始),所以有点卡住了。
该字符串作为标识符包含在[方括号]中。我尝试了多种方法 - 我不明白如何构造正则表达式或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);
最终输出:
gallery / _mycode_single.php?id = 1& data = only(也删除[])
我知道这当前不起作用,因为我不知道从多行编译输出的方法;任何援助将不胜感激。谢谢!
答案 0 :(得分:0)
您需要分两层,首先在[]
之间拉取所有内容,然后根据需要替换值。你可以使用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
是一个标签。