Соответствует любому символу, кроме "

Я хочу сопоставить любой символ (без учета регистра), за исключением случаев, когда ему предшествует одинарная кавычка, за которой следует текст 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)проверит, является ли первый символ "а", а любое выражение после него будет проверять с первого символа. Другими словами, упреждающий просмотр не перемещает механизм регулярных выражений к следующему символу, если совпадение не найдено.

Другие вопросы по тегам