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)
    匹配
    #dev
    并断言直接位于右侧的不是2和单词边界
  • [0-9]+
    匹配1+个数字
  • (?:
    非捕获组
    • \R
      匹配unicode换行符序列
    • (?!#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])*”