正则表达式替换标点符号

时间:2014-11-27 07:47:06

标签: php regex

我已经尝试了几个小时来使这个工作达到我需要的效果但是没有任何效果应该如此。我正在构建一个讨论板类型的东西,并通过在帖子文本中放置@username来标记其他用户。

目前,我已经使用此代码删除了一旦标签已从整个文本中删除而不属于用户名的任何内容:

$name= preg_replace("/[^A-Za-z0-9_]/",'',$name);

这很有效,因为它可以正确捕获例如(@username)@username:@username, some text等名称(以便删除,: ,和))。

但是,当用户的用户名中包含非ascii字符时,这不起作用。例如,如果它是@üsername,则上面该行的结果会给sername提供无用的效果。

有没有办法使用preg_replace来删除这些额外的标点符号,但保留任何非ascii字母?

非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:4)

您输入的区域为Unicode Regexps

$name= preg_replace('/[^\p{Letter}\p{Number}_]/u', '', $name);

或反过来。我提供的链接包含更多示例。

答案 1 :(得分:1)

要检测标点字符,您可以改为使用unicode属性\p{P}

$name = preg_replace('/[\p{P} ]+/', '', $name);

RegEx Demo