Я ищу в файле строки, которые не заканчиваются обратной косой чертой (\
), но они должны начинаться с некоторого текста, поэтому я написал:Поиск строк, которые не заканчиваются заданным символом
if ($cur_line =~ m{\A\s+(.+?)(?!\\)\z/xms){
... # parentheses are only for testing
}
Но с приведенным выше $1
всегда содержит всю строку (без пробелов), включая обратную косую черту в конце. Только первое вхождение строки без обратного слэша в конце соответствует правильно. После этого все линии с задней задней косой чертой совпадают. Зачем? Что я делаю не так?
Когда я использую:
if ($cur_line =~ m{\A\s+[^\\]+(?!\\)\z/xms){
...
}
он работает почти правильно, однако $cur_line
затем может содержать обратную косую черту.
Я проверил следующий код:
if ($cur_line !~ m{\\\z}xms) {
драм он прекрасно работает. Но мне любопытно, что не так с моим негативным взглядом.
a lookahead смотрит вперед * (означает «следует за») *, поскольку следующий токен в вашем шаблоне - это '\ z' anchors * (конец строки) *,' (?! \\) \ z 'всегда верно! (в конце строки нет слэша, так как это конец строки). Чтобы проверить последний символ перед концом строки, попробуйте lookbehind '(?