Java正则表达式匹配器无法工作

时间:2017-08-30 09:12:00

标签: java regex regex-group

您好我有正则表达式问题,我的代码是通过检查很多xml文件和更改一些地方的单词。一切顺利,直到我使用matches.replaceAll

我已经调查了谷歌,无法找到解决方案。 因此,代码逐行读取每个文件,并检查其中是否与模式匹配。

String patternStringDepOne = "(\\=(Dep)|\\=(Dep_LS)|(Dep)|(Dep_LS))((\\.dbo\\.)|\\.\\[dbo\\])";

有多种模式,每种模式都必须进行检查。

所以检查代码

while(matcherDep.find()) { 
    if (matcherDep.group(2) != null) {
         if (matcherDep.group(2).matches("Dep") || matcherDep.group(2).matches("Dep_LS")) {
              String replaceAllDep = matcherDep.replaceAll(" <DEP>$6");
         }
    }
}

所以这个par检查总共4组2,3,4,5并改变与word匹配。 我的问题是,经过大量的匹配,它给了我错误,我不知道为什么,为什么它的前后工作不起作用。如果我评论出行替换所有它的工作原理。错误从一行到另一行取决于它的替换程度。

错误是:

java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:536)

此外,因为在一个while语句中,每个组的代码中都有一个if语句。它通常会在最后的if语句中失败。但是,如果我在 While 语句之后立即写 System.out.println ,那么在if语句之后它会为一个创建匹配的静态null打印出来;

所以任何想法为什么它发生以及如何解决它都会很好。

换句话说,我有大约680个xml文件,其中需要搜索

  

Dep,[Dep],Dep_LS和[Dep_LS]

另外两个类似配置的变量 在各种方面, Dep 可以是第一个单词可以在文本的中间,也可以是一个可以是它们的多个。我需要将它们更改为所有四个 Dep 变体。一个xml文件看起来像这样

  

Dep.dbo.ISINsdjndfadsfasd adsf.dsafadsf asd()dfasd Dep.dbo.jodnsf.sdfj   afsdasf adfa.sda.asdf asfd()das INNER JOIN Dep.dbo.ISIN_CALCULATED   ISIN_FACT ON(Dep.dbo.ISIN.ISIN_ID = [Dep] .dbo.EVENT.EVENT_ISSUER)INNER   Dep。[dbo] .ISINsdjndfadsfasd adsf.dsafadsf asd()dfasd   Dep。[dbo] .jodnsf.sdfj afsdasf adfa.sda.asdf asfd()das INNER JOIN   [Dep]。[dbo] .ISIN_CALCULATED ISIN_FACT ON   (Dep。[dbo] .ISIN.ISIN_ID = [Dep_LS]。[dbo] .EVENT.EVENT_ISSUER)INNER   [Dep_LS] .dbo.ISINsdjndfadsfasd adsf.dsafadsf asd()dfasd   Dep_LS.dbo.jodnsf.sdfj afsdasf adfa.sda.asdf asfd()das INNER JOIN   Dep_LS.dbo.ISIN_CALCULATED ISIN_FACT ON   (Dep_LS.dbo.ISIN.ISIN_ID = Dep_LS.dbo.EVENT.EVENT_ISSUER)内部   Dep。[dbo] .ISINsdjndfadsfasd adsf.dsafadsf asd()dfasd   Dep_LS。[dbo] .jodnsf.sdfj afsdasf adfa.sda.asdf asfd()das INNER JOIN   Dep_LS。[dbo] .ISIN_CALCULATED ISIN_FACT ON   (Dep_LS。[DBO] .ISIN.ISIN_ID = Dep_LS。[DBO] .EVENT.EVENT_ISSUER)

完成的结果应该是

<DEP>.dbo.ISINsdjndfadsfasd adsf.dsafadsf asd()dfasd
<DEP>.dbo.jodnsf.sdfj afsdasf adfa.sda.asdf asfd () das INNER JOIN
<DEP>.dbo.ISIN_CALCULATED ISIN_FACT ON
(<DEP>.dbo.ISIN.ISIN_ID=[Dep].dbo.EVENT.EVENT_ISSUER) INNER
<DEP>.[dbo].ISINsdjndfadsfasd adsf.dsafadsf asd()dfasd
<DEP>.[dbo].jodnsf.sdfj afsdasf adfa.sda.asdf asfd () das INNER JOIN
[Depend].[dbo].ISIN_CALCULATED ISIN_FACT ON
(<DEP>.[dbo].ISIN.ISIN_ID=[Dep_LS].[dbo].EVENT.EVENT_ISSUER) INNER
[Depend_LS].dbo.ISINsdjndfadsfasd adsf.dsafadsf asd()dfasd
<DEP>.dbo.jodnsf.sdfj afsdasf adfa.sda.asdf asfd () das INNER JOIN
<DEP>.dbo.ISIN_CALCULATED ISIN_FACT ON
(<DEP>.dbo.ISIN.ISIN_ID=Dep_LS.dbo.EVENT.EVENT_ISSUER) INNER
<DEP>.[dbo].ISINsdjndfadsfasd adsf.dsafadsf asd()dfasd
<DEP>.[dbo].jodnsf.sdfj afsdasf adfa.sda.asdf asfd () das INNER JOIN
<DEP>.[dbo].ISIN_CALCULATED ISIN_FACT ON
(<DEP>.[dbo].ISIN.ISIN_ID=Dep_LS.[dbo].EVENT.EVENT_ISSUER) Showing
14 matches Dep.dbo.ISINsdjndfadsfasd adsf.dsafadsf asd()dfasd

请记住,此结果仅来自一个paramaterString,但其中有6个,并且所有6个参数都应检查每个xml文件

好的,我得到了正常表达的工作

  

(依(:_ LS)| [依靠(?:?_ LS)]?)(。DBO | [DBO)

所以现在中的代码,而循环看起来像

if (matcherDep.group(1) != null) { String replaceAll = matcherDep.replaceAll("<DEP>$2>"); }

0 个答案:

没有答案