Из Справочного руководства GLib, раздел Синтаксис регулярных выражений, подраздел Атомная группировка и притяжательные квантификаторы:
Рассмотрим шаблон
\d+foo
применительно к строке123456bar
: после сопоставления всех 6 цифр и неудачного совпадения с foo нормальным действием сопоставителя является повторная попытка только с 5 цифрами, соответствующими элементу \d+, а затем с 4, и так далее. на, прежде чем в конечном итоге потерпит неудачу.Если мы используем
(?>\d+)foo
(называемую атомарной группировкой) для предыдущего примера, сопоставитель немедленно сдается, если не может сопоставить foo в первый раз.Когда подшаблон для атомарной группы представляет собой всего один повторяющийся элемент, как в приведенном выше примере, можно использовать более простую запись, называемую притяжательным квантором:
\d++foo
Мой вопрос: есть ли причина, по которой нет эквивалента для оператора повторения звезды (*
)?
Пример на Java:
final String in = "123456";
// "plus" (+)
System.out.println(in.matches("\\d+")); // true
System.out.println(in.matches("(?>\\d+)")); // true
System.out.println(in.matches("\\d++")); // true
// "star" (*)
System.out.println(in.matches("\\d*")); // true
System.out.println(in.matches("(?>\\d*)")); // true
System.out.println(in.matches("\\d**")); // exception
Трассировка стека исключений:
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 3
\d**
^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.sequence(Pattern.java:1878)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
at java.util.regex.Pattern.<init>(Pattern.java:1133)
at java.util.regex.Pattern.compile(Pattern.java:823)
at java.util.regex.Pattern.matches(Pattern.java:928)
at java.lang.String.matches(String.java:2090)
star
вместоstart
?\d*
здесь*
соответствует\d
, тогда у вас есть еще*
, который ничему не соответствует. Если вы сделаете.*
, то он будет соответствовать любому символу любое количество раз (если я правильно помню,.
соответствует всем, кроме\n
, и может быть несколько других вещей). - person Bill   schedule 24.04.2013