preg_replace仅适用于非英文字符

时间:2014-05-19 20:25:27

标签: php preg-replace preg-match

我有一个用href替换所有hashtag的函数。

function hash_me($ret) {
     $ret = preg_replace('/(\#)([^\s]+)/', ' <a href="tag/$2">#$2</a> ', $ret);
}

效果很好。它将使用主题标签作为链接返回字符串(以及其余的非主题标签单词)。

问题是我想用含有英文字符的hrefs 主题标签替换。应忽略非英语标签。

我如何合并/适合:

preg_match('/#[^a-z\d]/i',$da_string)

具有上述功能?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用unicode字符类Latin

function hash_me($ret) {
     $ret = preg_replace('/#([\p{Latin}0-9]+)/', ' <a href="tag/$1">$0</a> ', $ret);
}

但请记住,拉丁语和英语是两回事。

仅限英文字符:

function hash_me($ret) {
     $ret = preg_replace('/#([a-z0-9]+)/i', ' <a href="tag/$1">$0</a> ', $ret);
}

或更短:

function hash_me($ret) {
     $ret = preg_replace('/#([^\W_]+)/', ' <a href="tag/$1">$0</a> ', $ret);
}