正则表达式非获取匹配的用法

前几天一个朋友用 Zabbix 自带的 log 关键字监控对日志内容进行监控,需要用到正则表达式匹配,其中的一个要求类似如下:
匹配日志中的 error 或者 Error 关键词,但是排除 errorexcept 或者 Errorexcept,则可以使用 (error|Error)(?!except) 正则表达式来进行匹配这样的要求,也就是正则的非获取匹配。

关于正则表达式非获取匹配的用法说明与示例如下:
(?:pattern)
非获取匹配,匹配 pattern 但不获取匹配结果,不进行存储供以后使用。 例如 industr(?:y|ies) 就是一个比 industry|industries 更简略的表达式。

(?=pattern)
非获取匹配,正向肯定预查,在任何匹配 pattern 的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如 Windows(?=95|98|NT|2000) 能匹配 Windows2000 中的 Windows,但不能匹配 Windows3.1 中的 Windows。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?!pattern)
非获取匹配,正向否定预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如 Windows(?!95|98|NT|2000) 能匹配 Windows3.1 中的 Windows,但不能匹配 Windows2000 中的 Windows。

(?<=pattern)
非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如 (?<=95|98|NT|2000)Windows 能匹配 2000Windows 中的 Windows,但不能匹配 3.1Windows 中的 Windows。

(?<!pattern)
非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。例如 (?<!95|98|NT|2000)Windows 能匹配 3.1Windows 中的 Windows,但不能匹配 2000Windows 中的 Windows。

正则表达式在线测试:http://tool.chinaz.com/regex/
参考:https://www.cnblogs.com/keystone/articles/10709819.html

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注