Квантификаторы и классы символов
Есть примеры и описания квантификаторов регулярных выражений в 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 для более подробной информации о регулярных выражениях, особенно часть отладчика на левой боковой панели