Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_替换另一个preg_替换的比赛_Php_Regex - Fatal编程技术网

Php preg_替换另一个preg_替换的比赛

Php preg_替换另一个preg_替换的比赛,php,regex,Php,Regex,我有一种感觉,我可能错过了一些非常基本的东西。无论如何,情况是这样的: 我正在使用preg_replace将===inputA===inputB==转换为 这就是我用的 $new = preg_replace('/===(.*?)===(.*?)===/', '<a href="$2">$1</a>', $old); 基本上,在第一个代码中,你看到那边的$2,我需要对$2执行操作,这样它只包含\w,正如你在第二个代码中看到的那样。所以最终结果应该是这样的: 将链接的页面

我有一种感觉,我可能错过了一些非常基本的东西。无论如何,情况是这样的:

我正在使用preg_replace将
===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>