Как совместить с regex все специальные символы, кроме «-» в PHP?

Как я могу сопоставить все «специальные» символы (например, +_*&^%$#@!~ ), Кроме char - in 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}] .
  • Обратите внимание, что 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}] 

Вы можете попробовать этот шаблон

([^a-zA-Z-])

Это должно соответствовать всем символам, которые не являются az и -