根据模式匹配从文件中提取行集

问题描述 投票:0回答:1

我有一个包含数千元组(三行的集合)的文件,如下所示:

# 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);

但是,我的目标不是在结果文件中获得匹配的模式。提前谢谢。

java regex regex-lookarounds regex-negation regular-language
1个回答
0
投票

如果要匹配# 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次以上

Regex demo | Java Demo

在Java中

String regex = "^# dev(?!2\\b)[0-9]+(?:\\R(?!# dev[0-9]).*)*";
© www.soinside.com 2019 - 2024. All rights reserved.