2017-02-24 12 views
1

非常に短い質問ですが、Matcherが見つけたグループ番号を抽出することは可能ですか?例えばJava:Matcherからグループ番号を抽出

ここに私のコードです。このパターンでは

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

2番目のグループのDOM要素属性に追加したい。サイクルでは、第2試合から最初の試合からグループ2、グループ3になるなど

+1

あなたのグループに ''(?。*) "'というパターンをつけて、 'matcher.group(" groupId ")'を呼び出すことができます。それはより読みやすく、あなたが望むことを実行できるようにする必要があります。 –

+0

それを覚えておいてください。この機能については知らなかった。 – Vitaliy

+0

このようにする必要はありません。あなたは本当に試合の番号で注文を実施しているわけではありません。あなたは注文を実施しようとしている場合、あなたは1つのマッチだけを必要とします。 (?:рис。\ s(\ d +))。*?(?:[Рр]исунок\ s(\ d +))*?(?:[Рр]исунку\ s(\ d +)) 。*?(?:fig。\ s(\ d +))。*?(?:[fF] igure \ s(\ d +)) ' – sln

答えて

1

あなたはすべてのグループをループ第二グループから始まり、最初のnull以外のグループを見つけ、あなたの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

関連する問題