Соответствует любому символу, кроме "
Я хочу сопоставить любой символ (без учета регистра), за исключением случаев, когда ему предшествует одинарная кавычка, за которой следует текст On Error Goto:
Соответствие:
on error goto err_handler
if aap = 0 then on error goto Myerrorhandler
on error goto errorhandler1
on error goto errorhandler2
Не соответствовать:
' on error goto errorhandler3
' if aap =0 then on error goto errorhandler4
Any line not containing On Error Goto
Я старался:
[^']*(On Error Goto)
но это не сработало.
Он предназначен для проверки использования обработчика ошибок в процедурах.
Благодаря!
2 ответа
Использовать
^[^'\n\r]*On Error Goto
Использовать
i
режим без учета регистра и
m
многострочный режим. Смотрите доказательство.
Объяснение
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
[^'\n\r]* any character except: ''', '\n' (newline),
'\r' (carriage return) (0 or more times
(matching the most amount possible))
--------------------------------------------------------------------------------
On Error Goto 'On Error Goto'
Обновлена ссылка на тестовые примеры регулярных выражений: https://regex101.com/r/UYll0h/6
Поскольку не может быть персонажа, когда
'
там нет, поэтому вам нужно будет использовать прогнозирующее утверждение.
Так как в коде могут быть и другие символы (кроме
'
) в строке перед
on error goto
(как в строке
if aap = 0 then on error goto Myerrorhandler
), чтобы справиться с ними, вам также нужно будет поставить условие, чтобы проверить, есть ли какой-либо символ, кроме
'
присутствует после прогнозирования. Это будет сделано
([^']+)?
.
^(?!')([^']+)?on error goto
В
(?)
называется упреждающим. Он проверяет, присутствуют ли символы внутри него или нет. в отличие
[]
,
(?)
будет утверждать истину, даже если нет символов. Так, например,
[a]
будет проверять, является ли первый символ 'a', но любое выражение после него будет проверять от второго символа. С другой стороны,
(?=a)
проверит, является ли первый символ "а", а любое выражение после него будет проверять с первого символа. Другими словами, упреждающий просмотр не перемещает механизм регулярных выражений к следующему символу, если совпадение не найдено.