Регулярные выражения
В свою очередь, операция поиска по образцу / (?=b+) с+/ в нашем примере не даст результата. Данный образец задает условие, что следующий фрагмент текста должен содержать непустую последовательность литер ь. В нашей строке такой – фрагмент будет найден (это фрагмент bbb), но не будет включен в результат поиска. Следующий фрагмент, в соответствии с образцом, должен представлять непустую последовательность литер с, но в нашем случае этого соответствия не будет, так как мы остановились перед фрагментом ььь, не включив его в результат, и поэтому следующим фрагментом будет bbb, а не ссс.
Конструкцию (?=pattern) будем называть регулярным выражением с положительным постусловием.
(?!pattern)
Конструкция (? [pattern) в регулярном выражении задает условие, что следующий фрагмент текста не должен удовлетворять образцу pattern. Найденный фрагмент не запоминается в переменной $&. Например, результат операции поиска:
$str =~ m/b+(?!c+)/;
…в рассмотренной выше строке $str будет зафиксирован в следующих значениях специальных переменных:
$' – ааа $& – bb $' – bcccddd
Найденная подстрока соответствует образцу: она состоит из двух литер ьь, за которыми не следует последовательность литер с.
По аналогии с предыдущей данную конструкцию назовем регулярным выражением с отрицательным постусловием.
(?<=pattern)
Конструкция (?<=pattern) в регулярном выражении задает условие, что предыдущий фрагмент текста должен удовлетворять образцу pattern. Найденный фрагмент не запоминается в переменной $&. Образец pattern должен иметь фиксированную длину, т. е. не содержать множителей.
В нашем примере в результате операции поиска:
$str =~ m/(?<=b)b+/;
…значения специальных переменных будут распределены следующим образом:
$' – aaab $& – bb $' – cccddd I
Данную конструкцию назовем регулярным выражением с положительным предусловием.
(?<!pattern)
Конструкция (?<! pattern) в регулярном выражении задает условие, что предыдущий фрагмент текста не должен удовлетворять образцу pattern. Найденный фрагмент не запоминается в переменной $&. Образец pattern должен иметь фиксированную длину, т. е. не содержать множителей.
В нашем примере в результате операции поиска:
$str =~ m/(?<!b)c+/;
…специальные переменные получат следующие значения:
$' – aaabbbc $& – ее $' – ddd
Данную конструкцию будем называть регулярным выражением с отрицательным предусловием.
(?imsx-imsx)