В классе персонажей
Ваш шаблон содержит этот подшаблон:
[\s\w]*
[…]
- это класс символов . Что-то вроде [aeiou]
соответствует одному из строчных гласных. [^…]
является отрицательным классом символов. [^aeiou]
соответствует одному из всего, кроме строчных гласных.
\s
- сокращение для класса символов пробела; \w
для класса символов слова. Ни один из них не содержит дефис.
*
- это ноль или более повторение спецификатор.
Теперь вы должны понять, почему этот шаблон не соответствует дефису: он соответствует нулю или более символов, которые являются пробелом или символом слова. Если вы хотите сопоставить дефис, вы можете включить его в класс символов.
[\s\w-]*
Если вы также хотите включить точку, вопросительный знак и восклицательный знак, например, то вы можете просто добавить их также:
[\s\w.!?-]*
Специальное примечание к дефису
Будьте осторожны при включении дефиса в класс персонажа. Он используется как метасимвол регулярного выражения в определении класса символов для определения диапазона символов. Например,
[a-z]
соответствует одному символу в диапазоне от 'a'
до 'z'
включительно. В отличие от
[az-]
соответствует одному из 3 символов: 'a'
, 'z'
и '-'
. Когда вы ставите -
как последний элемент в классе символов, он становится буквальным дефисом вместо определения диапазона. Вы также можете указать его как элемент first или экранировать его (добавив обратную косую черту, как и другие метасимволы regex).
То есть следующие 3 класса символов идентичны:
[az-] [-az] [a\-z]
Похожие вопросы