我正在尝试关联Twitter帖子。但是看起来像“#löövet”的主题标签并没有像我希望的那样得到过滤器。他们在外国人物之前被切断了。应该允许外国字符。
任何人都知道如何为此目的改变正则表达式?
以下是我的例子:
//Hashtag
$tweet = preg_replace("/ +#([a-z0-9_]*)?/i", " <a href=\"http://twitter.com/tag/\\1\" target=\"_blank\">#\\1</a>", $tweet);
//Problem:
/*
* The function above does not match foreign characters as å/ä/ö
* Tag result example: tag = #löövet
* After preg_replace: tag = #l öövet
* Desired after preg_replace: tag = #löövet
*/
答案 0 :(得分:2)
怎么样:
$tweet = preg_replace("/ +#(\p{Xwd}*)/u", " <a href=\"http://twitter.com/tag/$1\" target=\"_blank\">#$1</a>", $tweet);
\p{Xwd}
与\w
的含义相同,包含所有unicode字母,数字和下划线。
如果您不想使用下划线,请使用\p{Xan}
。
答案 1 :(得分:1)
使用\ p {L}代替a-z匹配所有unicode字母(或\ p {L} \ p {N}与数字匹配)
$tweet = preg_replace("/ +#([\p{L}\p{N}_]*)?/i", " <a href=\"http://twitter.com/tag/\\1\" target=\"_blank\">#\\1</a>", $tweet);
在regexp中查找有关unicode的更多信息,请查看here
答案 2 :(得分:0)
如果你的主题标签不包含任何空格,你可以试试这个,而不是在unicode后面运行。
/ +#(\S+)/
答案 3 :(得分:0)
如果您想将允许的字母限制为拉丁字母,您可以使用:
$tweet = preg_replace('/ +#([\p{Latin}0-9_]*)/u', ' <a href="http://twitter.com/tag/$1" target="_blank">#$1</a>", $tweet);