logo search
Программирование на языке Ruby

3.13.5. Еще о кванторах

Мы уже встречались с атомарными подвыражениями в «классической» библиотеке регулярных выражений в Ruby. Они выделяются с помощью нотации (?>...) и являются «собственническими» в том смысле, что жадные и не допускают возврата внутрь подвыражения.

Oniguruma предлагает еще один способ выразить собственническую природу — с помощью квантора +. Он отличается от метасимвола + в смысле «один или более» и даже может использоваться с ним совместно. (На самом деле это «вторичный» квантор, как и ?, который можно употреблять в таких контекстах, как ??, +? и *?.)

Применение + к повторяющемуся образцу эквивалентно заключению его в скобки как независимого подвыражения, например:

r1 = /x*+/ # То же, что /(?>x*)/

r2 = /x++/ # То же, что /(?>x+)/

r3 = /x?+/ # То же, что /(?>x?)/

По техническим причинам Ruby не считает конструкцию {n,m}+ собственнической.

Понятно, что новый квантор — не более чем удобное обозначение, никакой новой функциональности он не несет.