Квантификаторы

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

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

Метасимвол квантификатора

Описание

* (звезда)

Соответствует предыдущему элементу, повторяющемуся нуль или более раз.

+ (плюс)

Соответствует предыдущему элементу, повторяющемуся один или более раз.

? (знак вопроса)

Соответствует предыдущему элементу, повторяющемуся нуль или один раз.

{ n }

{ n ,}

и

{ n , n }

Определяет числовой квантификатор или диапазон квантификатора предыдущего элемента:

/A{27}/ соответствует символу А, повторяемому 27 раз.

/A{3,}/ соответствует символу А, повторяемому 3 раза или более.

/A{3,5}/ соответствует символу А, повторяемому от 3 до 5 раз.

Квантификатор может применяться в отношении одиночного символа, класса символов или группы:

  • /a+/ соответствует символу a , повторяемому один раз или более.

  • /\d+/ соответствует одной или нескольким цифрам.

  • /[abc]+/ соответствует повторению одного или более символов, каждый из которых является либо a , либо b , либо c .

  • /(very, )*/ соответствует слову very , за которым следует запятая и пробел, повторяемый нуль раз или более.

Квантификаторы могут использоваться внутри групп в круглых скобках, имеющих применимые к ним квантификаторы. Например, следующий квантификатор соответствует строкам, таким как word и word-word-word :

/\w+(-\w+)*/

По умолчанию регулярные выражения представляют то, что известно как поглощающее совпадение. Любой подобразец в регулярном выражении (таком как .* пытается соответствовать как можно большему числу символов в строке, прежде чем переходить к следующей части регулярного выражения. Например, рассмотрим следующее регулярное выражение и строку:

var pattern:RegExp = /<p>.*<\/p>/; 
str:String = "<p>Paragraph 1</p> <p>Paragraph 2</p>";

Регулярное выражение соответствует всей строке:

<p>Paragraph 1</p> <p>Paragraph 2</p>

Хотя предположим, что требуется соответствие только одной группе <p>...</p> . Это можно сделать следующим образом:

<p>Paragraph 1</p>

Добавьте знак вопроса ( ? после любого квантификатора, чтобы изменить его на то, что известно как «ленивый» квантификатор . Например, следующее регулярное выражение, использующее «ленивый» квантификатор *? , соответствует <p> , за которым следует минимально возможное число («ленивых») символов, за которыми идет </p> :

/<p>.*?<\/p>/

Следует держать в памяти следующие пункты, касающиеся квантификаторов.

  • Квантификаторы {0} и {0,0} не исключают из совпадения элемент.

  • Не объединяйте несколько квантификаторов, как в /abc+*/ .

  • Символ точки (.) не соединяет строки до тех пор, пока не установлен флаг s ( dotall ), даже если за ним идет квантификатор * . Например, рассмотрим следующий код:

    var str:String = "<p>Test\n"; 
    str += "Multiline</p>"; 
    var re:RegExp = /<p>.*<\/p>/; 
    trace(str.match(re)); // null; 
     
    re = /<p>.*<\/p>/s; 
    trace(str.match(re)); 
        // output: <p>Test 
        //                    Multiline</p>

Дополнительные сведения см. в разделе « Флаги и свойства ».