Вычитание класса символов, преобразование из синтаксиса Java в RegexBuddy - PullRequest
12 голосов
/ 08 июля 2010

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

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

[a-z&&[^bc]]

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

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

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

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

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

Ответы [ 3 ]

19 голосов
/ 08 июля 2010

Как и большинство разновидностей регулярных выражений, 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 Schema, .NET, JGSoft и RegexBuddy это [a-z-[aeiou]]. Другие версии могут вообще не поддерживать эту функцию.

Ссылки

Смежные вопросы

4 голосов
/ 08 июля 2010

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

Вы можете проверить это с помощью Eclipse-плагина или онлайн .

2 голосов
/ 09 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...