Вычитание класса символов, преобразование из синтаксиса Java в RegexBuddy
Какой механизм регулярных выражений использует Java?
В инструменте, таком как RegexBuddy, если я использую
[a-z&&[^bc]]
это выражение в Java хорошо, но в RegexBuddy оно не было понято.
Фактически он сообщает:
Сопоставьте один символ, присутствующий в список ниже [a-z&&[^bc]
- Символ в диапазоне между
a
и z
: a-z
- Один из символов
&[^bc
: &&[^bc
- Соответствует символу
]
буквально: ]
но я хочу совместить символ между a
и z
, пересекающимся с символом, который не является b
или c
Ответы
Ответ 1
Как и большинство разновидностей регулярных выражений, java.util.regex.Pattern
имеет свои собственные особенности с синтаксисом, которые могут быть несовместимы с другими; это включает объединение классов символов, пересечение и вычитание:
-
[a-d[m-p]]
: a
через d
или m
через p
: [a-dm-p]
(объединение) -
[a-z&&[def]]
: d
, e
или f
(пересечение) -
[a-z&&[^bc]]
: a
через z
, за исключением b
и c
: [ad-z]
(вычитание)
Важнейшим "предостережением" регулярного выражения Java является то, что matches
пытается сопоставить шаблон со всей строкой. Это нетипично для большинства двигателей и может быть источником замешательства в разы.
См. также
Вычитание класса символов
Вычитание позволяет вам определить, например, "все согласные" в Java как [a-z&&[^aeiou]]
.
Этот синтаксис специфичен для Java. В XML-схеме,.NET, JGSoft и RegexBuddy, это [a-z-[aeiou]]
. Другие варианты могут не поддерживать эту функцию вообще.
Ссылки
Связанные вопросы
Ответ 2
Java использует свой собственный механизм регулярных выражений, поведение которого определено в классе Pattern.
Вы можете протестировать его с помощью плагина Eclipse или онлайн.
Ответ 3
RegexBuddy еще не поддерживает синтаксис объединения, пересечения и вычитания класса символа, который уникален для аромата регулярного выражения Java. Это единственная часть синтаксиса регулярного выражения Java, которую RegexBuddy еще не поддерживает. Мы планируем реализовать это в будущей версии RegexBuddy. Причина, по которой это было отложено, заключается в том, что другой синтаксис регулярного выражения не поддерживает этот синтаксис.
P.S.: Если у вас есть вопрос о RegexBuddy в частности, добавьте тег regexbuddy в свой вопрос. Затем вопрос автоматически появляется в моем читателе RSS. Я не следую тегу "regex", потому что слишком много вопросов используют этот тег, и большинство из них уже ответили на время, когда я их вижу.