如何与正则表达式匹配PHP中除“-”之外的所有特殊字符?

Posted

技术标签:

【中文标题】如何与正则表达式匹配PHP中除“-”之外的所有特殊字符?【英文标题】:How to match with regex all special chars except "-" in PHP? 【发布时间】:2012-04-01 09:30:03 【问题描述】:

如何匹配除 php 中的字符 - 之外的所有“特殊”字符(如 +_*&^%$#@!~)?

我知道\W 将匹配所有“特殊”字符,包括-

关于 Unicode 字母有什么建议吗?

【问题讨论】:

特殊字符,如 +_)(*&^%$#@!~,不是任何语言... 【参考方案1】: \pL 匹配任何具有 Unicode Letter 字符属性的字符,这是一个大的通用类别组;也就是说,它匹配[\pLl\pLt\pLu\pLm\pLo]\pN 匹配任何具有 Unicode Number 字符属性的字符,这是一个主要的通用类别组;也就是说,它匹配[\pNd\pNl\pNo]。 请注意,Unicode Alphabetic 字符属性还包括某些组合标记,例如 U+0345 ◌ͅ ᴄᴏᴍʙɪɴɪɴɢ ɢʀᴇᴇᴋ ʏᴘᴏɢᴇɢʀᴀᴍᴍᴇɴɪ。我建议你还包括\pM,它匹配任何具有Unicode Mark 字符属性的字符,这是一个主要的通用类别组;也就是说,它匹配[\pMn\pMe\pMc]。 字符 U+002D ʜʏᴘʜᴇɴ-ᴍɪɴᴜꜱ 可能是您所指的-。 请注意,尽管 Unicode v6.1 有 27 个字符,具有 Unicode Dash 字符属性,包括 U+2010 ʜʏᴘʜᴇɴ、U+2013 ᴇɴ ᴅᴀꜱʜ、U+2014 ᴇᴍ ᴅᴀꜱʜ等常见字符, 和 U+2212 ᴍɪɴᴜꜱ ꜱɪɢɴ。不管你是真的想包括还是排除那些,我不知道。

考虑到所有这些,您不太可能想要这样的东西:

[^\pL\pN\pM\x2D\x2010-\x2015\x2212]

【讨论】:

【参考方案2】: [^-] 不是你想要的特殊字符 [\W] 都是你知道的特殊字符 [^\w] 也是特殊字符 - 听起来公平吗?

因此[^\w-] 是两者的组合:所有“特殊”字符但没有-

【讨论】:

也可以,谢谢,由于某种原因它与 _ 字符不匹配...但我设法绕过了它, 您认为[\W] 会做什么而\W 不会? @tchrist:你什么意思,我不这么认为。 为什么要在单个字符类缩写周围加上方括号? 您似乎将_ 之类的东西误分类为非特殊,将àéüîøçñ 之类的东西误分类为一半-special,以及像‾ΑΒK5 这样的东西作为special。这根本没有意义。【参考方案3】:

你可以试试这个模式

([^a-zA-Z-])

这应该匹配所有不是a-z- 的字符

【讨论】:

不好,因为unicode中可以有字母……总之,找到答案了! [^\pL-\d] 考虑到您的问题非常广泛,没有特定的字符集范围,所以这是我的假设。

以上是关于如何与正则表达式匹配PHP中除“-”之外的所有特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章

python 正则表达式

正则表达式:除了特殊文件类型(如.lnk)之外的所有文件

正则表达式:匹配除特定模式之外的所有内容

正则表达式,匹配除 \r \n 之外的所有内容作为普通字符

js正则怎么判断一个字符串里必须包含大写字母,小写字母,数字,特殊字符? 看清楚了,是必须包含,求教

正则表达式 - 如何匹配除特定模式之外的所有内容