我有一个包含数千元组(三行的集合)的文件,如下所示:
# dev2
SAMETEXT %{URI} ^dev2-00.XXX.XXX.XXX
SAMETEXT %{URI} ^/XXX/
DIFFTEXT ^/XXX/(.*) https://XXX-XXX-XXX-XXX-dev2.XXX.XXX.XXX.XXX.XXX/XXX/$1 [X,Y]
[多组相同种类的数据不同,例如dev1,dev2,dev3。现在,我想以除dev2以外的所有行方式获取文件中的所有行。文件具有随机或混合的组,但是所有组都是上述相同行的元组。
我试图通过以下模式获得它,但它也给出了位于此范围内的所有其他元组。
Pattern dev2Pattern = Pattern.compile("dev2\\R.*dev2-00.*\\RRewriteRule.*dev2", Pattern.DOTALL);
但是,我的目标不是在结果文件中获得匹配的模式。提前谢谢。
如果要匹配# dev
之后的所有行,除非它是# dev 2
,则可以使用负前瞻断言在dev不等于2之后就正确了。
然后匹配所有不以# dev
开头且后跟数字的行。
^# dev(?!2\b)[0-9]+(?:\R(?!# dev[0-9]).*)*
^
字符串的开头# dev(?!2\b)
匹配# dev
并断言直接在右边的不是2和单词边界[0-9]+
匹配1个以上的数字(?:
非捕获组\R
匹配Unicode换行符序列(?!# dev[0-9])
断言直接在右边的不是# dev
和一个数字.*
如果是这种情况,请匹配0+乘除换行符以外的任何字符)*
关闭组并重复0次以上在Java中
String regex = "^# dev(?!2\\b)[0-9]+(?:\\R(?!# dev[0-9]).*)*";