首页 > 解决方案 > 基于字符串的正则表达式贪婪匹配

问题描述

1)我尝试用正则表达式匹配字符串的全部部分。贪心有问题,我想。下面是考虑中的pl/sql的结构

ERRORHANDLER
WHEN TRUE THEN
    IF SOMETHING THEN
     ELSE
    END IF;
WHEN FALSE THEN
END;

以下是我框架匹配的正则表达式^(\s*)ERRORHANDLER((?!FUNCTION).) END[(\s )(\w+)|;]

在哪里 ,

^(\s*)ERRORHANDLER- 匹配随机空格和静态字符串 ERRORHANDLER,它们始终是模式的开头。

((?!FUNCTION).)* - 贪婪的负面展望*

END[(\s*)(\w+)|;]- 匹配 END 以及以分号结尾的可选字符串。

虽然我确信匹配字符串的方法,但这个正则表达式没有正确匹配它。

预期输出:

完全匹配

ERRORHANDLER
WHEN TRUE THEN
    IF SOMETHING THEN
     ELSE
    END IF;
WHEN FALSE THEN
END;

标签: regex-lookaroundsregex-greedy

解决方案


由于这里的开头和结尾都是基于单词的,因此需要使用边界,并且合并以下 2 ,

  • 开始词和结束词。
  • 它们之间用字符和元字符量化。

所以对于这个正则表达式将匹配的问题 \bERRORHANDLER[\w|\W]+END\b;


推荐阅读