如何匹配PHP中除了字符-
之外的所有"特殊"字符(如+_*&^%$#@!~
)?
我知道'W
将匹配所有"特殊"字符,包括-
。
对Unicode字母有什么建议吗?
[^-]
不是您想要的特殊字符['W]
都是特殊字符[^'w]
也都是特殊的角色——听起来公平吗
因此,[^'w-]
是两者的组合:所有"特殊"字符,但没有-
。
'pL
匹配任何具有UnicodeLetter
字符属性的字符,这是一个主要的通用类别组;即它与['p{Ll}'p{Lt}'p{Lu}'p{Lm}'p{Lo}]
相匹配'pN
匹配任何具有UnicodeNumber
字符属性的字符,这是一个主要的通用类别组;即与['p{Nd}'p{Nl}'p{No}]
匹配- 请注意,Unicode
Alphabetic
字符属性还包括某些组合标记,如U+0345◌ͅᴄᴏᴍᴇᴇᴋʏᴘᴏɢᴇɢᴀᴍᴍᴇ。我建议您还包括'pM
,它匹配任何具有UnicodeMark
字符属性的字符,这是一个主要的通用类别组;即它与['p{Mn}'p{Me}'p{Mc}]
相匹配 - 字符U+002Dʜʏᴘʜᴇ⑪-ᴍᴜꜱ可能是你所指的
-
- 请注意,Unicode v6.1有27个字符,具有Unicode
Dash
字符属性,包括U+2010ʜʏ等常见字符ᴘʜᴇ2013年U月ᴇ⑪ᴅᴀꜱʜ,U+2014ᴇᴍ ᴅᴀꜱʜ和U+2212ᴍᴜꜱ ꜱ。我不知道你是真的想包括还是排除这些
考虑到所有这些,你不太可能想要这样的东西:
[^'pL'pN'pM'x2D'x{2010}-'x{2015}'x{2212}]
您可以尝试这种模式
([^a-zA-Z-])
这应该匹配所有不是a-z
和-
的字符