Як переписати [a-zA-Z0-9!$* \t\r\n]шаблон, щоб він відповідав дефісу разом із існуючими символами?
Як переписати [a-zA-Z0-9!$* \t\r\n]шаблон, щоб він відповідав дефісу разом із існуючими символами?
Відповіді:
Втеча з дефіса.
[a-zA-Z0-9!$* \t\r\n\-]
ОНОВЛЕННЯ :
Не зважайте на цю відповідь - ви можете додати дефіс до групи, але вам не доведеться його уникати. Натомість див. Відповідь Конрада Рудольфа, яка набагато краще відповідає та пояснює, чому.
Дефіс зазвичай є нормальним символом у регулярних виразах. Лише якщо це в класі символів та між двома іншими символами, це набуває особливого значення.
Отже:
[-] відповідає дефісу.[abc-]матчі a, b, cабо дефіс.[-abc]матчі a, b, cабо дефіс.[ab-d]сірники a, b, cабо d( тільки тут дефіс позначає діапазон символів).[a-c-e]: це просто недійсне в деяких специфікаціях / механізмах регулярних виразів. Наприклад, регулярний вираз POSIX забороняє його.
Менше заплутано завжди використовувати дефіс, що втік, так що він не повинен бути позиційно залежним. Це \-всередині класу символів у дужках.
Але є дещо інше для розгляду. Деякі з цих перелічених символів, можливо, слід писати інакше. За деяких обставин вони точно повинні.
Це порівняння ароматів регулярних виразів говорить про те, що C♯ може використовувати деякі простіші властивості Unicode. Якщо ви маєте справу з Unicode, вам, мабуть, слід використовувати загальну категорію \p{L}для всіх можливих літер, а можливо , і \p{Nd}для десяткових чисел. Крім того, якщо ви хочете вмістити всі ці пунктичні знаки, а не лише ДІФЕН-МІНУС, вам слід скористатися \p{Pd}властивістю. Можливо, ви також захочете написати таку послідовність пробілів як \s, припускаючи, що це не надто загально для вас.
Все разом це працює на зразок того, [\p{L}\p{Nd}\p{Pd}!$*]щоб відповідати будь-якому одному персонажу з цього набору.
Я б, скоріше за все, скористався цим, навіть якщо я не планував мати справу з повним набором Unicode, тому що це хороша звичка, і тому ці речі часто перевищують свої початкові параметри. Тепер, коли ви піднімаєте його для використання в іншому коді, він все одно буде працювати коректно. Якщо ви жорстко кодуєте всі символи, це не буде.
[-a-z0-9] +, [a-z0-9 -] +, [az-0-9] +, а також [az-0-9] + - однакові. Дефіс між двома діапазонами розглядається як а також [a-z0-9 - + ()] + цей регулярний вираз допускає дефіс.
використовуйте "\ p {Pd}" без лапок, щоб відповідати дефісу будь-якого типу. Символ "-" - це лише один тип дефіса, який також є спеціальним символом у регулярному виразі.