Квантификаторы и классы символов

Есть примеры и описания квантификаторов регулярных выражений в Java Tutorial.

Жадный - съедает полную строку, затем отступает на один символ и пытается снова

Regex: .*foo  // greedy 
String to search: xfooxxxxxxfoo
Found "xfooxxxxxxfoo"

Неохотно - начинай сначала, потом ешь по одному персонажу за раз

Regex: .*?foo  // reluctant quantifier
String to search: xfooxxxxxxfoo
Found "xfoo", "xxxxxxfoo"

Possessive - съедает всю строку, пытаясь один раз на матч

Regex: .*+foo // possessive quantifier
String to search: xfooxxxxxxfoo
No match found

Они в порядке, и я их понимаю, но может кто-нибудь объяснить мне, что происходит, когда регулярное выражение заменяется на класс символов? Есть ли другие правила?

Regex: [fx]*
String to search: xfooxxxxxxfoo
Found "xf","","","xxxxxxf","","","",""

Regex: [fx]*?
String to search: xfooxxxxxxfoo
Found 15 zero-length matches

Regex: [fx]*+
String to search: xfooxxxxxxfoo
Found "xf","","","xxxxxxf","","","",""

1 ответ

Решение

Он применяет квантификатор (жадный, неохотный / ленивый, притяжательный) ко всему классу персонажа. Это означает, что он будет соответствовать (жадно, лениво и т. Д.) Каждому литеральному символу в классе символов.

Regex: [fx]*
String to search: xfooxxxxxxfoo
Found "xf","","","xxxxxxf","","","",""

Так выглядит ноль или более f или же x, Двигатель находит xf который соответствует. Это также соответствует пустой строке вокруг двух o"S. Затем он соответствует последовательному xпотому что это ноль или более f или же x,

Я хотел бы проверить regex101.com для более подробной информации о регулярных выражениях, особенно часть отладчика на левой боковой панели

Другие вопросы по тегам