Вычитание класса символов, преобразовывающее от синтаксиса Java до RegexBuddy

Какой механизм регулярного выражения делает использование Java?

В инструменте как RegexBuddy, если я использую

[a-z&&[^bc]]

то выражение в Java хорошо, но в RegexBuddy это не было понято.

На самом деле это сообщает:

Соответствуйте отдельному символу, существующему в списке ниже [a-z&&[^bc]

  • Символ в диапазоне между a и z : a-z
  • Один из символов &[^bc : &&[^bc
  • Соответствуйте символу ] буквально: ]

но я хочу соответствовать символу между a и z пересеченный с символом, который не является b или c

12
задан polygenelubricants 9 July 2010 в 10:45
поделиться

3 ответа

Как и большинство регексов, 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]]. Другие версии могут вообще не поддерживать эту функцию.

Ссылки

Похожие вопросы

19
ответ дан 2 December 2019 в 06:08
поделиться

Java использует собственный механизм регулярных выражений, поведение которого определяется в классе Pattern .

Вы можете протестировать его с помощью подключаемого модуля Eclipse или в Интернете .

4
ответ дан 2 December 2019 в 06:08
поделиться

RegexBuddy пока не поддерживает синтаксис объединения, пересечения и вычитания классов символов, который является уникальным для регулярных выражений Java. Это единственная часть синтаксиса Java regex, которую RegexBuddy пока не поддерживает. Мы планируем реализовать это в одной из будущих версий RegexBuddy. Причина, по которой это было отложено, заключается в том, что ни один другой флавор регулярных выражений не поддерживает этот синтаксис.

P.S.: Если у вас есть вопрос о RegexBuddy в частности, пожалуйста, добавьте тег "regexbuddy" к вашему вопросу. Тогда вопрос автоматически появится в моем RSS-ридере. Я не слежу за тегом "regex", потому что слишком много вопросов используют этот тег, и на большинство из них уже есть ответы к тому времени, когда я их вижу.

2
ответ дан 2 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: