Как создать класс персонажей из следующего набора
+ - * / % < > = ! & ^ | ? :
Я пробовал:
[+-*/%<>=!&^|?:]
Но я думаю, что некоторые из них должны быть отвергнуты. Как я могу сказать, какие из них?
4 ответа
Вам нужно будет избежать -
в противном случае это будет интерпретироваться как диапазон символов между +
а также *
, который не действителен:
[+\-*/%<>=!&^|?:]
Другие метасимволы, насколько я знаю, взяты буквально в классе персонажей.
Вам не нужна маскировка, если вы ставите минус как первый или последний символ в вашей группе, потому что тогда он не может означать "до", как в [az]. Точно так же знак каретки означает "не в этой группе" только в том случае, если это первый символ группы: [^az]:= не az.
Квантификаторы (+?*) Не имеют никакого смысла в группе, поэтому символы, используемые для их представления, здесь стоят сами за себя. Другие символы никогда не значат что-то особенное в регулярных выражениях.
Быстрая демонстрация в Scala:
for (c <- "-+*/%<>=!&^|?:") yield ("" + c).matches ("[-+*/%<>=!&^|?:]")
res1: scala.collection.immutable.IndexedSeq[Boolean] =
Vector(true, true, true, true, true, true, true, true, true, true, true, true, true, true)
Вместо того, чтобы явно перечислять символы для сопоставления, вы можете попробовать использовать один из классов символов, таких как \p{Punct} (соответствует пунктуации US-ASCII) или \W соответствует несимвольным символам!(A-Za-z0-9).
Вы бы использовали что-то вроде \p{Punct}* или \W*, они могут привести к чему-то немного более широкому, чем ваш другой поиск, но это не может быть плохо....
Прочитав инструкцию:-)? + соответствует как минимум одному предыдущему символу, * означает любое количество символов, | является логическим или, ^ определяет отрицание символа. Вы также можете избежать всех их, чтобы быть уверенным!
РЕДАКТИРОВАТЬ
Я вижу, я должен был также прочитать руководство сначала:-)