Как сопоставить с регулярным выражением все специальные символы, кроме "-" в PHP? - PullRequest
10 голосов
/ 15 марта 2012

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

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

Есть ли какие-либо предложения по рассмотрению букв Unicode?

Ответы [ 3 ]

35 голосов
/ 16 марта 2012
  • [^-] не тот специальный символ, который вам нужен
  • [\W] все специальные символы, как вы знаете
  • [^\w] также все специальные символы - звучит честно?

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

6 голосов
/ 16 марта 2012
  • \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}]
3 голосов
/ 15 марта 2012

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

([^a-zA-Z-])

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...