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

Как я могу сопоставить все "специальные" символы (например, +_*&^%$#@!~), кроме char - в PHP?

Я знаю, что \W будет соответствовать всем "специальным" символам, включая -.

Любые предложения, касающиеся букв Юникода?

Ответ 1

  • [^-] не является специальным символом, который вы хотите.
  • [\W] - все специальные символы, как вы знаете
  • [^\w] также являются специальными символами - звучит честно?

Таким образом, [^\w-] представляет собой комбинацию обоих: всех "специальных" символов, но без -.

Ответ 2

  • \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 ʜʏᴘʜᴇɴ-ᴍɪɴᴜꜱ, вероятно, относится к - youre.
  • Обратите внимание, что этот Unicode v6.1 имеет 27 символов с свойством символа Unicode Dash, включая такие общие символы, как U + 2010 ʜʏᴘʜᴇɴ, U + 2013 ᴇɴ ᴅᴀꜱʜ, U + 2014 ᴇᴍ ᴅᴀꜱʜ, и U + 2212 ᴍɪɴᴜꜱ ꜱɪɢɴ. Если вы действительно хотите включить или исключить их, я понятия не имею.

Учитывая все это, маловероятно, что вы хотите что-то вроде:

[^\pL\pN\pM\x2D\x{2010}-\x{2015}\x{2212}]

Ответ 3

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

([^a-zA-Z-])

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