【问题标题】:preg_replace only for non-english characterspreg_replace 仅适用于非英文字符
【发布时间】:2014-05-19 20:25:27
【问题描述】:

我有一个用 href 替换所有主题标签的功能。

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

效果很好。它将返回带有标签作为链接的字符串(以及其余的非标签词)。

问题是我想用 hrefs only 替换包含英文字符的主题标签。非英文主题标签应该被忽略。

我如何合并/适应:

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

有上述功能?

谢谢!

【问题讨论】:

  • “非英语”是什么意思?您如何区分#centre(加拿大英语)和#centre(法语)?

标签: php preg-replace preg-match


【解决方案1】:

可以使用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);
}

【讨论】:

  • !!!抱歉,我的问题有误。我的意思是非英语!!!无论如何我都会投票!编辑:接受!
  • @Theodoros80:我已经根据这个新要求修改了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
相关资源
最近更新 更多