在正则表达式中使用反向引用
Using back reference in regex
我有一个 php 函数 returns Facebook post 作为文本。但是,我希望所有#-hashtags 都可以点击并引用 http://www.facebook/hashtags/{the-hashtag}。我尝试使用以下 preg_replace 执行此操作,但显然我做错了什么:
$postMessage = preg_replace('/#[^(\s|\p{P})]*', '<a href="https://www.facebook.com/hashtag/" title=""></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/" title="">#</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/\" title=\"\">#</a>";
$result = preg_replace($re, $subst, $str);
#([^\s\p{P}]*)\S+
只需将您的正则表达式分组 correclty.Its working.See 演示。
我有一个 php 函数 returns Facebook post 作为文本。但是,我希望所有#-hashtags 都可以点击并引用 http://www.facebook/hashtags/{the-hashtag}。我尝试使用以下 preg_replace 执行此操作,但显然我做错了什么:
$postMessage = preg_replace('/#[^(\s|\p{P})]*', '<a href="https://www.facebook.com/hashtag/" title=""></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/" title="">#</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/\" title=\"\">#</a>";
$result = preg_replace($re, $subst, $str);
#([^\s\p{P}]*)\S+
只需将您的正则表达式分组 correclty.Its working.See 演示。