Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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正则表达式_Php_Regex_Preg Replace_Phpbb3 - Fatal编程技术网

替换链接的PHP正则表达式

替换链接的PHP正则表达式,php,regex,preg-replace,phpbb3,Php,Regex,Preg Replace,Phpbb3,我有这个替换正则表达式(它取自phpbb源代码) 然而,我想把它变成一个替换函数。因此,我可以通过提供href替换块中的链接标题 我想提供的网址,新的网址和新的标题。所以我可以用这些变量运行正则表达式 $url = 'http://website.com/link-is-looooooong.txt'; $new_title = 'hello'; $new_url = 'http://otherwebsite.com/'; 它将返回相同的原始消息,但链接已更改 <!-- m -->

我有这个替换正则表达式(它取自phpbb源代码)

然而,我想把它变成一个替换函数。因此,我可以通过提供href替换块中的链接标题

我想提供的网址,新的网址和新的标题。所以我可以用这些变量运行正则表达式

$url = 'http://website.com/link-is-looooooong.txt';
$new_title = 'hello';
$new_url = 'http://otherwebsite.com/';
它将返回相同的原始消息,但链接已更改

<!-- m --><a class="postlink" href="http://otherwebsite.com/">hello</a><!-- m -->

我试着把它改成这样,但我做不好。我不知道如何建立匹配的结果,所以它在替换后具有相同的格式

$message = preg_replace('#<!\-\- ([mw]) \-\-><a (?:class="[\w-]+" )?href="'.preg_quote($url).'" target\=\"_blank\">(.*?)</a><!\-\- \1 \-\->#', $replace, $message);
$message=preg#u replace(“##,$replace,$message);

您会发现用正则表达式解析HTML可能会很麻烦,而且会变得非常复杂。最好的办法是使用DOM解析器,并用它来修改链接。

您会发现用正则表达式解析HTML会很麻烦,而且会变得非常复杂。您最好使用DOM解析器,并用它修改链接。

您还需要捕获组中的其他部分,然后在替换中使用它们。试着这样做:

$replace = '\1http://otherwebsite.com/\3hello\4';
$reg = '#(<!-- ([mw]) --><a (?:class="[\w-]+" )?href=")'.preg_quote($url).'("(?: target="_blank")?>).*?(</a><!-- \2 -->)#';
$message = preg_replace($reg, $replace, $message);
$replace='\1http://otherwebsite.com/\3 hello\4';
$reg='#()#';
$message=preg_replace($reg,$replace,$message);

请参见。

您还需要将其他零件分组,然后在更换时使用它们。试着这样做:

$replace = '\1http://otherwebsite.com/\3hello\4';
$reg = '#(<!-- ([mw]) --><a (?:class="[\w-]+" )?href=")'.preg_quote($url).'("(?: target="_blank")?>).*?(</a><!-- \2 -->)#';
$message = preg_replace($reg, $replace, $message);
$replace='\1http://otherwebsite.com/\3 hello\4';
$reg='#()#';
$message=preg_replace($reg,$replace,$message);

请参阅。

我知道正则表达式和html的问题。但是它来自phpbb数据库,所以结构总是一致的。我知道正则表达式和html的问题。但是它来自phpbb数据库,所以结构总是一致的。
$message = preg_replace('#<!\-\- ([mw]) \-\-><a (?:class="[\w-]+" )?href="'.preg_quote($url).'" target\=\"_blank\">(.*?)</a><!\-\- \1 \-\->#', $replace, $message);
$replace = '\1http://otherwebsite.com/\3hello\4';
$reg = '#(<!-- ([mw]) --><a (?:class="[\w-]+" )?href=")'.preg_quote($url).'("(?: target="_blank")?>).*?(</a><!-- \2 -->)#';
$message = preg_replace($reg, $replace, $message);