Php preg_替换另一个preg_替换的比赛
我有一种感觉,我可能错过了一些非常基本的东西。无论如何,情况是这样的: 我正在使用preg_replace将Php preg_替换另一个preg_替换的比赛,php,regex,Php,Regex,我有一种感觉,我可能错过了一些非常基本的东西。无论如何,情况是这样的: 我正在使用preg_replace将===inputA===inputB==转换为 这就是我用的 $new = preg_replace('/===(.*?)===(.*?)===/', '<a href="$2">$1</a>', $old); 基本上,在第一个代码中,你看到那边的$2,我需要对$2执行操作,这样它只包含\w,正如你在第二个代码中看到的那样。所以最终结果应该是这样的: 将链接的页面
===inputA===inputB==
转换为
这就是我用的
$new = preg_replace('/===(.*?)===(.*?)===/', '<a href="$2">$1</a>', $old);
基本上,在第一个代码中,你看到那边的$2
,我需要对$2
执行操作,这样它只包含\w
,正如你在第二个代码中看到的那样。所以最终结果应该是这样的:将链接的页面转换为
我不知道该怎么做,我该怎么做?试着用第一个将两个匹配项转换成变量,然后用preg\u replace()对需要进一步检查的那个进行替换?试着用第一个将两个匹配项转换成变量,然后用preg\u replace()进行替换对于需要进一步检查的一个,为什么不从第一个正则表达式(
preg\u match
)中提取匹配项并处理这些结果,然后将它们放回HTML表单中?为什么不从第一个正则表达式(preg\u match
)中提取匹配项并处理这些结果,然后将它们放回HTML格式?尽管已经有一个公认的答案:这就是/e
修饰符或preg\u replace\u callback()的作用:
echo preg_replace(
'/===(.*?)===(.*?)===/e',
'"<a href=\"".preg_replace("/[^\w]/","","$2")."\">$1</a>"',
'===inputA===in^^putB===');
//Output: <a href="inputB">inputA</a>
echo preg\u replace(
'/==(.*?)==(.*?)====/e',
'""',
'==输入===在^^putB===');
//输出:
或:
function\u my\u url\u func($vars){
返回“”;
}
回显preg_replace_回调(
'/===(.*?)===(.*?)===/',
'我的url'func',
“===inputA===inputB==”);
//输出:
尽管已经有一个公认的答案:这就是/e
修饰符或preg\u replace\u callback()
的作用:
echo preg_replace(
'/===(.*?)===(.*?)===/e',
'"<a href=\"".preg_replace("/[^\w]/","","$2")."\">$1</a>"',
'===inputA===in^^putB===');
//Output: <a href="inputB">inputA</a>
echo preg\u replace(
'/==(.*?)==(.*?)====/e',
'""',
'==输入===在^^putB===');
//输出:
或:
function\u my\u url\u func($vars){
返回“”;
}
回显preg_replace_回调(
'/===(.*?)===(.*?)===/',
'我的url'func',
“===inputA===inputB==”);
//输出:
我也在考虑这个问题,不过展示一些代码来说明如何做到这一点是个好主意。先进行preg\u匹配,然后在循环中使用str\u replace,最后进行preg\u replace。但我发布了这个问题,因为我想知道是否有一种方法可以直接在“$2”上执行操作。无论如何,谢谢:)我也在考虑这个问题,不过展示一些代码来实现这一点是个好主意。先进行preg_匹配,然后在循环中使用str_替换,最后进行preg_替换。但我发布了这个问题,因为我想知道是否有一种方法可以直接在“$2”上执行操作。无论如何谢谢:)太好了,这正是我想要的!谢谢太好了,这正是我想要的!谢谢
function _my_url_func($vars){
return '<a href="'.strtoupper($vars[1]).'">'.$vars[2].'</a>';
}
echo preg_replace_callback(
'/===(.*?)===(.*?)===/',
'_my_url_func',
'===inputA===inputB===');
//Output: <a href="INPUTA">inputB</a>