Вычитание класса символов, преобразование из синтаксиса 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", потому что слишком много вопросов используют этот тег, и большинство из них уже ответили на время, когда я их вижу.