除了PHP中的char +_*&^%$#@!~
之外,我怎样才能匹配所有“特殊”字符(如-
)?
我知道\W
会匹配所有“特殊”字符,包括-
。
考虑使用Unicode字母的任何建议?
答案 0 :(得分:35)
[^-]
不是您想要的特殊字符[\W]
都是您知道的特殊字符[^\w]
也都是特殊字符 - 听起来很公平吗?因此,[^\w-]
是两者的组合:所有“特殊”字符,但没有-
。
答案 1 :(得分:5)
\pL
匹配具有Unicode Letter
字符属性的任何字符,这是一个主要的常规类别组;也就是说,它匹配[\p{Ll}\p{Lt}\p{Lu}\p{Lm}\p{Lo}]
。\pN
匹配具有Unicode Number
字符属性的任何字符,这是一个主要的常规类别组;也就是说,它匹配[\p{Nd}\p{Nl}\p{No}]
。Alphabetic
字符属性还包括某些组合标记,例如U + 0345◌ᴄᴏᴍʙɪɴɪɴɢɢʀᴇᴇᴋʏᴘᴏɢᴇɢʀᴀᴍᴍᴇɴɪ。我建议你还包括\pM
,它匹配任何具有Unicode Mark
字符属性的字符,这是一个主要的通用类别组;也就是说,它匹配[\p{Mn}\p{Me}\p{Mc}]
。-
。 Dash
字符属性,包括U +2010ʜʏᴘʜᴇɴ,U + 2013ᴇɴᴅᴀꜱʜ,U + 2014等常见字符ᴇᴍᴇᴍ,和U + 2212ᴍɪɴᴜꜱꜱɪɢɴ。无论你是否真的想要包括或排除这些,我都不知道。考虑到这一点,你不可能想要这样的东西:
[^\pL\pN\pM\x2D\x{2010}-\x{2015}\x{2212}]
答案 2 :(得分:3)
你可以尝试这种模式
([^a-zA-Z-])
这应匹配非a-z
和-