我正在尝试匹配某些日志条目,其中包括部分字符串"数字">而排除其他也包含字符串"Number">的日志条目.
someNumber = 12345
anotherNumber = 45678
thirdNumber = 010101
otherNumber = 99999
& lt; someNumber> 12345
& lt; anotherNumber> 45678
& lt; thirdNumber> 010101
& lt; otherNumber> 99999
我需要匹配包含字符串"Number">的所有条目而只排除了其中的一部分。所以,所有出现的"thirdNumber">和"otherNumber"(无论后面跟着b =或>)需要匹配。而"someNumber">和"anotherNumber">需要从匹配中排除
注意,一些日志条目包含一个等号(someNumber=12345),而其他条目则被XML标记包围(
此外,有时需要排除部分匹配(即子字符串"other"在日志条目"和其他中数量="。
我在尝试什么:(? !。* ( bsomeNumber | banotherNumber))(数量)
似乎不适合我。谢谢你的帮助。
假设这个要求不是特别重要:
注意,一些日志条目包含等号(someNumber=12345),而其他条目则由XML标记(12345)包围
如何:
b(?!(?:some|another))w+Number
演示一个选项可能是
<?b(?!someNumber|anotherNumber)bw+Number[=>]d+
模式匹配:
<?
匹配可选<
b(?!someNumber|anotherNumber)b
一个词边界,断言没有任何或2个词直接向右使用负向前看w+Number
匹配1+单词字符后跟Number
[=>]d+
匹配=
或>
和1+数字
Regex演示
如果支持条件,您可以使模式更严格一些,当有打开<
时匹配关闭>
,否则匹配=
(<)?b(?!someNumber|anotherNumber)bw+Number(?(1)>|=)d+
Regex演示
对黑名单使用否定的展望:
b(?!(someNumber|otherNumber)b)w+Numberb
查看现场演示
请注意,反向查找需要正确地包含表达式的词边界match边缘情况someNumberNumber
等。