繁体   English   中英

在正则表达式中使用反向引用

[英]Using back reference in regex

我有一个php函数,以文本形式返回Facebook帖子。 但是,我希望所有#标签都可以单击并引用http://www.facebook/hashtags/ {the-hashtag}。 我尝试使用以下preg_replace进行此操作,但显然我做错了什么:

$postMessage = preg_replace('/#[^(\s|\p{P})]*', '<a href="https://www.facebook.com/hashtag/$1" title="$1"></a>', $postMessage);

这会在期望的位置输出链接,因此正则表达式看起来正确,但是输出看起来像这样:

<a href="https://www.facebook.com/hashtag/" title=""></a>

因此,我很确定自己在向后引用中做错了什么,但我不确定是什么。

(旁边的问题,在preg_replace中是否不需要global参数?我习惯在JS中使用它。)

$postMessage的示例:

Android Wear testen doen we met de Sony #Smartwatch3. Binnenkort volgt een uitgebreide review op de website ;-)

输出应为:

Android Wear testen doen we met de Sony <a href="https://www.facebook.com/hashtag/smartwatch3" title="Smartwatch3">#Smartwatch3</a>. Binnenkort volgt een uitgebreide review op de website ;-)

正则表达式:

#([^\p{P}\s]*)

[^\\p{P}\\s]*与任何字符匹配,但不匹配零个或多个零点或空格。

替换字符串:

<a href="https://www.facebook.com/hashtag/$1" title="$1">#$1</a>

演示

PHP代码是

$re = "/#([^\\p{P}\\s]*)/m";
$str = "Android Wear testen doen we met de Sony #Smartwatch3. Binnenkort volgt een uitgebreide review op de website ;-)\n\n";
$subst = "<a href=\"https://www.facebook.com/hashtag/$1\" title=\"$1\">#$1</a>";

$result = preg_replace($re, $subst, $str);
#([^\s\p{P}]*)\S+

只需对您的正则表达式进行分组即可,它可以正常工作。

https://regex101.com/r/vD5iH9/39

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM