我如何匹配除PHP 中+_*&^%$#@!~
的字符之外的所有“特殊”字符(如 ) ?-
我知道这\W
将匹配所有“特殊”字符,包括-
.
考虑到 Unicode 字母有什么建议吗?
我如何匹配除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}]
.Alphabetic
字符属性还包括某些组合标记,例如 U+0345 ◌ͅ ᴄᴏᴍʙɪɴɪɴɢ ɢʀᴇᴇᴋ ʏᴘᴏɢᴇɢʀᴀᴍᴍᴇɴɪ。我建议您还包括\pM
,它与具有 UnicodeMark
字符属性的任何字符匹配,这是一个主要的通用类别组;也就是说,它匹配[\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}]
你可以试试这个模式
([^a-zA-Z-])
这应该匹配所有不是a-z
的字符和-