如何匹配除了" - "在PHP中的正则表达式所有特殊字符?

CaT*_*aTz 12 php regex unicode non-alphanumeric special-characters

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

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

有关Unicode字母的任何建议吗?

hak*_*kre 39

  • [^-] 不是你想要的特殊角色
  • [\W] 如你所知,都是特殊字符
  • [^\w] 都是特殊人物 - 听起来很公平吗?

因此[^\w-],两者的结合:所有"特殊"字符,但没有-.


tch*_*ist 6

  • \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ʜʏᴘʜᴇɴ,U +2013ᴇɴᴇɴ,U +2014ᴇᴍᴇᴍ和U +2212ᴍɪɴᴜꜱᴍɪɴᴜꜱ等常见字符.无论你是否真的想要包含或排除这些,我都不知道.

鉴于这一切,你不可能想要这样的东西:

[^\pL\pN\pM\x2D\x{2010}-\x{2015}\x{2212}]
Run Code Online (Sandbox Code Playgroud)