2017-02-24 21 views
1

很短的問題,可以提取匹配器發現的組號碼嗎?Java:從匹配器中提取組號碼

例如這裏是我的代碼:

Pattern k = Pattern.compile("(рис.\\s(\\d+)|[Рр]исунок\\s(\\d+)|[Рр]исунку\\s(\\d+)|fig.\\s(\\d+)|[fF]igure\\s(\\d+))"); 
Matcher m = k.matcher(DOMNode.getTextContent()); 

      while(m.find()) {   
       domElement.setAttribute("rid", "fig" + m.group(!1)); 
      } 

有了這個模式,我可以得到幾個全匹配。他們將被分組爲比賽1:組1,組2;比賽2:第1組,第3組;匹配3:組1,組4

我想附加到來自第二組的DOM元素屬性。在循環將是從第一場比賽從第二場比賽的第2組,第3組等

+1

您可以使用語法'「(?。*)」'將您的組命名爲模式,然後調用matcher.group(「groupId」)'。它更具可讀性,可以讓你做你想做的事。 –

+0

會記住它。不知道這個功能。 – Vitaliy

+0

你不需要這樣做。你並不是真的通過比賽的號碼執行一個命令。你可以使用這個'([Pр]исунок| [Pр]исунку|рис。| [Ff] igure | fig。)s(\ d +)'如果你試圖強制執行一個命令,你只需要1個匹配把它們全部放在一起。(?:и。。\ s(\ d +))。 。*?(?: fig。\ s(\ d +))。*?(?:[fF] igure \ s(\ d +))' – sln

回答

1

可以遍歷從第二組開始,各組找到的第一個非空組並填充DOM:

while(m.find()) { 
    for (c=2; c<=m.groupCount(); c++) { 
     if (m.group(c) != null) { 
      domElement.setAttribute("rid", "fig" + m.group(c)); 
      break; 
     } 
    } 
} 
+1

謝謝。代碼有效! – Vitaliy