0

我想对 Twitter Hashtags 进行正则表达式。使用此代码:

    $html = preg_replace("#(^|[\n ])\#([^ \"\t\n\r<]*)#ise", "'\\1<a    href=\"".$website_content_url."/search=%23\\2\" target=\"_self\">#\\2</a>'", $html);

一切正常!但是当我使用这个词时:#Männer!该链接将包括!。但我希望链接在 ! 以及我可以输入的其他标志,例如?或点。但是!应该仍然显示;)

那可能吗?

谢谢 :)

4

1 回答 1

1

让我们关注有趣的部分:

\#([^ \"\t\n\r<]*)

此模式的工作原理如下:

\#          // match #
(           // open a capture group
  [^...]    // a negated character class which matches any character 
            // that is **not** inside this class
  *         // match the previous group / class zero or more times
)           // close capture group

在字符类中,您有\"\t\n\r<which 表示[^ \"\t\n\r<]匹配任何不是空格、引号、制表符、换行符、回车符或<. 您所要做的就是将标点符号添加到类中,例如:[^ \"\t\n\r<!].

您不必为变音符号 afaik 做任何特别的事情。


学习正则表达式的良好起点:http ://regular-expression.info/ 。

于 2013-02-10T21:13:00.850 回答