Java 基于模式匹配从文件中提取行集
我有一个包含数千个元组(一组三行)的文件,如下所示:Java 基于模式匹配从文件中提取行集,java,regex,regex-lookarounds,regex-negation,regular-language,Java,Regex,Regex Lookarounds,Regex Negation,Regular Language,我有一个包含数千个元组(一组三行)的文件,如下所示: # 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。文件有一个随机或混合
# 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(?!2\b)[0-9]+(?:\R(?!# dev[0-9]).*)*
字符串的开头^
匹配#dev(?!2\b)
并断言直接位于右侧的不是2和单词边界#dev
匹配1+个数字[0-9]+
非捕获组(?:
匹配unicode换行符序列\R
断言直接右边的不是(?!#dev[0-9])
和数字#dev
如果是这种情况,则匹配0+乘以除换行符以外的任何字符*
关闭分组并重复0多次)*
String regex = "^# dev(?!2\\b)[0-9]+(?:\\R(?!# dev[0-9]).*)*";
如果要匹配
#dev
之后的所有行,除非它是#dev 2,请尝试#dev(?2\b)[0-9]+(?:\R(?)#dev[0-9])。
请参阅在java程序中不起作用。在java中,反斜杠应该是双转义的<代码>字符串regex=“^ dev(?!2\\b)[0-9]+(?:\\R(?)\dev[0-9])*”代码>