Java正規表現を使用してサブテキストを取得する方法の例

2443 ワード

この例では、Javaが正規表現を使用してサブテキストを取得する方法について説明します.皆さんの参考にしてください.具体的には以下の通りです.
もともと、groupは()に対して、group(0)は列全体を指し、group(1)は最初の括弧の中のもの、group(2)は2番目の括弧の中のものを指す.
最近正規表現を勉強していると、Javaのいくつかの用語が他の場所で説明されているものとは異なることがわかりました.この問題について私を半日カードして、穴のお父さん、ブログを書いて、他の新学の友达に便利です.例えばJava正規表現の「グループ」の概念は、「正規表現は必ず知っている」という本で述べた「サブ表現」と同じで、表現が異なるだけです.これにより、JavaAPIを使用する場合、group(int group)start(int group)end(int group)についてあまり理解されていないことも引き起こされた.
手順は次のとおりです.

package cn.mingyuan.regexp.singlecharacter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GroupIndexAndStartEndIndexTest {
/**
* @param args
*/
public static void main(String[] args) {
  // TODO Auto-generated method stub
  String str = "Hello,World! in Java.";
  Pattern pattern = Pattern.compile("W(or)(ld!)");
  Matcher matcher = pattern.matcher(str);
  while(matcher.find()){
  System.out.println("Group 0:"+matcher.group(0));//   0 ――    
  System.out.println("Group 1:"+matcher.group(1));//       ―― (or)   
  System.out.println("Group 2:"+matcher.group(2));//       ―― (ld!)   ,        
  System.out.println("Start 0:"+matcher.start(0)+" End 0:"+matcher.end(0));//      
  System.out.println("Start 1:"+matcher.start(1)+" End 1:"+matcher.end(1));//        
  System.out.println("Start 2:"+matcher.start(2)+" End 2:"+matcher.end(2));//        
  System.out.println(str.substring(matcher.start(0),matcher.end(1)));//          1            ――Wor
  }
}
}


プログラムの実行結果は次のとおりです.

Group 0:World!
Group 1:or
Group 2:ld!
Start 0:6 End 0:12
Start 1:7 End 1:9
Start 2:9 End 2:12
Wor


まとめ:group(),start(),end()に持つパラメータiは正規表現のサブ表現インデックス(いくつかのサブ表現)であり,Java正規表現のグループの概念が最初は不明確であったため理解が困難であった.「グループ」の概念を「サブエクスプレッション」に対応させると、matcherのgroup、start、endを理解するのに全く支障がありません.
PS:ここでは、非常に便利な正規表現ツールを2つ提供します.
JavaScript正規表現オンラインテストツール:http://tools.jb51.net/regex/javascript
正規表現オンライン生成ツール:http://tools.jb51.net/regex/create_reg
Javaアルゴリズムに関する詳細に興味のある読者は、「Java正規表現テクニック大全」、「Javaデータ構造とアルゴリズムチュートリアル」、「Java操作DOMノードテクニック総括」、「Javaファイルとディレクトリ操作テクニック要約」、「Javaキャッシュ操作テクニック要約」のトピックを参照してください.
本文で述べたjavaプログラム設計に役立つことを願っています.