Php 正则表达式取代标点符号
我已经尝试了几个小时,以使这个工作的效果,我需要的,但没有工作非常像它应该。我正在构建一个讨论板类型的东西,并通过在帖子文本中添加Php 正则表达式取代标点符号,php,regex,Php,Regex,我已经尝试了几个小时,以使这个工作的效果,我需要的,但没有工作非常像它应该。我正在构建一个讨论板类型的东西,并通过在帖子文本中添加@username来标记其他用户 目前,我有以下代码,可以在标签从整个文本中取出后,删除任何不属于用户名的内容: $name= preg_replace("/[^A-Za-z0-9_]/",'',$name); 这很有效,因为它可以正确捕获名称,例如(@username)、@username:、@username、一些文本等(因此要删除、、:和)) 但是,当用户的用
@username
来标记其他用户
目前,我有以下代码,可以在标签从整个文本中取出后,删除任何不属于用户名的内容:
$name= preg_replace("/[^A-Za-z0-9_]/",'',$name);
这很有效,因为它可以正确捕获名称,例如(@username)
、@username:
、@username、一些文本等(因此要删除、
、:
和)
)
但是,当用户的用户名中包含非ascii字符时,这不起作用。例如,如果它是@üsername
,那么上面那行的结果将给出sername
,这是没有用的
有没有办法使用preg_replace去除这些额外的标点符号,但保留任何非ascii字母
非常感谢您的帮助:)要检测标点符号,您可以使用unicode属性\p{p}
:
$name = preg_replace('/[\p{P} ]+/', '', $name);
要检测标点符号,可以使用unicode属性\p{p}
:
$name = preg_replace('/[\p{P} ]+/', '', $name);
您可以进入的区域
或者反过来说。我提供的链接包含更多的示例。您可以输入的区域
或者反过来说。我提供的链接包含更多示例。echo preg_替换('/[:punct:]+/','''-')代码>-您可以通过复制粘贴我提供的字符串来尝试。这是mdash,显然不是由[:punct:]
处理的。谢谢anubhava!这比我想象的要容易得多:)@hashi,尽管这个答案是错误的,并且提供的regexp没有过滤所有标点符号(参见我之前的评论)?好吧,不管这对你是否合适,对我也一样。@anubhava:防守并没有真正的帮助。您的答案至少在两个方面是错误的:第一,黑名单从来都不可靠,第二,没有unicode支持。请修复它。伙计们,我使用了原始答案(在编辑之前),在对我以前的代码不起作用的所有情况进行测试后,它达到了预期目的。echo preg_替换('/[:punct:]+/',''-')代码>-您可以通过复制粘贴我提供的字符串来尝试。这是mdash,显然不是由[:punct:]
处理的。谢谢anubhava!这比我想象的要容易得多:)@hashi,尽管这个答案是错误的,并且提供的regexp没有过滤所有标点符号(参见我之前的评论)?好吧,不管这对你是否合适,对我也一样。@anubhava:防守并没有真正的帮助。您的答案至少在两个方面是错误的:第一,黑名单从来都不可靠,第二,没有unicode支持。请修复它。伙计们,我使用了原始答案(在编辑之前),在对我以前的代码不起作用的所有情况进行测试后,它达到了预期目的。这个答案对我来说更好,因为白名单是一种首选方式(匹配您想要保留的内容,而不是您想要删除的内容)。这个答案对我来说更好,因为白名单是首选方式(匹配您想要保留的内容,而不是您想要删除的内容)。