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