Java Regex не может найти соответствие - PullRequest
1 голос
/ 07 мая 2011

Это должно вернуть true, но вместо этого возвращает false.

"ADC".matches("A.*?C")

Я проверял это на тестере регулярных выражений javascript: http://regexpal.com/

и это работает, почему это не работает в Java?

EDIT: То же самое с этим:

System.out.println("DEAGHHF".matches("(A.*?C|C.*?A|D.*?C|C.*?D|A.*?F|F.*?A)"));

Возвращает false, регулярное выражение возвращает true (так же, как и другие механизмы регулярного выражения javascript).

1 Ответ

6 голосов
/ 07 мая 2011

Нет, возвращает true .

System.out.println("ADC".matches("A.*?C"));

выводит true.

Реализация regexpal.com, похоже, содержит ошибки (что понятно, так какэто версия 0.1.4).Попробуйте ввести ABC несколько раз.Только каждую секунду ABC отклоняется.(По крайней мере, при просмотре в моей версии Firefox.)

Относительно вашего редактирования:

A.?C|C.?A|D.?C|C.?D|A.?F|F.?A

интерпретируется как

A.*?C   or
C.*?A   or
D.*?C   or
C.*?D   or
A.*?F   or
F.*?A

Другими словами

Something that starts with A and ends with C, or
Something that starts with C and ends with A, or
Something that starts with D and ends with C, or
....
Something that starts with F and ends with A,

Поскольку "DEAGHHF "начинается с D и заканчивается F, оно не будет соответствовать.

Возможно, вы ищете Matcher.find метод

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