如何与regex匹配除“”之外的所有特殊字符-";在PHP中


How to match with regex all special chars except "-" in PHP?

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

我知道'W将匹配所有"特殊"字符,包括-

对Unicode字母有什么建议吗?

  • [^-]不是您想要的特殊字符
  • ['W]都是特殊字符
  • [^'w]也都是特殊的角色——听起来公平吗

因此,[^'w-]是两者的组合:所有"特殊"字符,但没有-

  • 'pL匹配任何具有Unicode Letter字符属性的字符,这是一个主要的通用类别组;即它与['p{Ll}'p{Lt}'p{Lu}'p{Lm}'p{Lo}]相匹配
  • 'pN匹配任何具有Unicode Number字符属性的字符,这是一个主要的通用类别组;即与['p{Nd}'p{Nl}'p{No}]匹配
  • 请注意,Unicode Alphabetic字符属性还包括某些组合标记,如U+0345◌ͅᴄᴏᴍᴇᴇᴋʏᴘᴏɢᴇɢᴀᴍᴍᴇ。我建议您还包括'pM,它匹配任何具有Unicode Mark字符属性的字符,这是一个主要的通用类别组;即它与['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- 的字符