如何与regex匹配所有特殊字符,但“除外”-&引用;在PHP中?
除了PHP中的字符如何与regex匹配所有特殊字符,但“除外”-&引用;在PHP中?,php,regex,unicode,special-characters,non-alphanumeric,Php,Regex,Unicode,Special Characters,Non Alphanumeric,除了PHP中的字符-,我如何匹配所有的“特殊”字符(如+.*&^%$\\@!~) 我知道\W将匹配所有“特殊”字符,包括- 对Unicode字母有什么建议吗?您可以尝试这种模式 ([^a-zA-Z-]) 这应该匹配所有不是a-z和-的字符 [^-]不是您想要的特殊字符 [\W]都是您知道的特殊字符 [^\w]所有的特殊字符都是吗?听起来公平吗 因此,[^\w-]是两者的组合:所有“特殊”字符,但不包含- \pL使用Unicode字母字符属性匹配任何字符,这是一个主要的常规类别组;也就是说,它匹
-
,我如何匹配所有的“特殊”字符(如+.*&^%$\\@!~
)
我知道\W
将匹配所有“特殊”字符,包括-
对Unicode字母有什么建议吗?您可以尝试这种模式
([^a-zA-Z-])
这应该匹配所有不是a-z
和-
- 的字符
不是您想要的特殊字符[^-]
都是您知道的特殊字符[\W]
所有的特殊字符都是吗?听起来公平吗[^\w]
[^\w-]
是两者的组合:所有“特殊”字符,但不包含-
使用Unicode\pL
字符属性匹配任何字符,这是一个主要的常规类别组;也就是说,它匹配字母
[\p{Ll}\p{Lt}\p{Lu}\p{Lm}\p{Lo}]
将任何字符与Unicode\pN
字符属性匹配,这是一个主要的常规类别组;也就是说,它匹配Number
[\p{Nd}\p{Nl}\p{No}]
- 请注意,Unicode
字母属性还包括某些组合标记,如U+0345◌ͅ ᴄᴏᴍʙɪɴɪɴɢ ɢʀᴇᴇᴋ ʏᴘᴏɢᴇɢʀᴀᴍᴍᴇɴɪ. 我建议您还包括
,它将任何字符与Unicode\pM
字符属性相匹配,这是一个主要的常规类别组;也就是说,它匹配标记
[\p{Mn}\p{Me}\p{Mc}]
- 字符U+002Dʜᴘʜᴇɴ-ᴍɪɴᴜꜱ 可能是您所指的
李>-
- 请注意,Unicode v6.1使用Unicode
character属性有27个字符,包括U+2010等常用字符ᴘʜᴇɴ,U+2013ᴇɴ ᴅᴀꜱʜ,U+2014ᴇᴍ ᴅᴀꜱʜ和U+2212ᴍɪɴᴜꜱ ꜱɪɢɴ. 我不知道你是否真的想包括或排除这些Dash
[^\pL\pN\pM\x2D\x{2010}-\x{2015}\x{2212}]
所有字符都是“特殊”字符!说出你的意思。特殊字符,如+)(*&^%$#@!~,不是任何语言的。英语当然使用了其中的大部分字符。其中许多字符在许多语言中使用。有些不是。说出你的意思。你仍然没有定义“specialness”。specialness的Unicode字符属性是什么这不好,因为unicode中可能有字母…无论如何,找到了答案![^\p{L}-\d]考虑到你的问题非常广泛,没有特定的字符集范围,所以这是我的假设。同样有效,谢谢你,出于某种原因,它与字符不匹配……但我设法绕过了这一点,你认为[\W]是什么
那是不是\W
不是?@tchrist:你是什么意思,我不这么认为。你为什么要在一个字符类缩写词周围写括号?你似乎把
之类的东西误分类为非特殊,把那样的东西误分类为半特殊,把那样的东西误分类为之类的东西5代码>作为特殊。这毫无意义。