java.util.regex
是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern
和Matcher
。パターンは、正規表現のコンパイルされた表現パターンです。 Matcher オブジェクトは、一致パターンとしての Pattern オブジェクトに基づいて文字列をチェックするステート マシンです。 まず、Pattern インスタンスが、PERL に似た構文を使用して正規表現のコンパイルされたパターンをカスタマイズし、次に Matcher インスタンスが、指定された Pattern インスタンスのパターン コントロールの下で文字列一致を実行します。
詳細な概要については、JDK の中国語ドキュメントを参照してください。以下に、一般的に使用されるいくつかの
constructs | match |
---|---|
. | an をリストします。 y文字(行末文字と一致する場合もあれば一致しない場合もあります) |
d | 数字: [0-9] |
D | 非数字: [^0-9] |
s | 空白文字: [tnx0Bfr] |
S | 空白以外の文字: [^s] |
w | 単語文字: [a-zA-Z_0-9] |
W | 単語以外の文字: [^w] |
[abc] | a、b または c (単純) |
[^abc] | a、b または c (否定) を除く任意の文字 |
[a -zA -Z] | a ~ z または A ~ Z、包括的 (範囲) |
^ | 行頭 |
$ | 行末 |
X、一度ではない、または | |
X{n,} | |
X{n,m} | |
Pattern
创建对象
//采用的complie(String regex)Pattern pattern = Pattern.compile("\\d+"); //采用的是complie(String regex,int flag)其中flag表示标志,下面的标志表示忽略字母大小写,详细的字段请看文档Pattern pattern=Pattern.compile("(CHEN)(\\D*)(\\d*)",Pattern.CASE_INSENSITIVE); ログイン後にコピー 常用方法
//给出正则表达式用于匹配数字(0-9)Pattern pattern = Pattern.compile("\\d+"); String str = "我是陈加兵456郑元梅34擦市场的逻辑啊"; String[] splits = pattern.split(str, 2); //结果:[我是陈加兵,郑元梅34擦市场的逻辑啊] ログイン後にコピー ログイン後にコピー
//给出正则表达式用于匹配数字(0-9)Pattern pattern = Pattern.compile("\\d+"); String str = "我是陈加兵456郑元梅34擦市场的逻辑啊"; String[] splits = pattern.split(str, 2); //结果:[我是陈加兵,郑元梅34擦市场的逻辑啊] ログイン後にコピー ログイン後にコピー
Pattern.matches("\\d+","2223");//返回true Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到 Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到 ログイン後にコピー
Pattern p=Pattern.compile("\\d+"); Matcher m=p.matcher("22bb23"); ログイン後にコピー Matcher
常用的方法
Pattern pattern=Pattern.compile("\\d+"); //创建Pattern对象String str="I am hreo 1234"; //需要匹配的字符串Matcher matcher=pattern.matcher(str);//并没有完全匹配,因此返回false,如果str="123445",那么就会返回trueSystem.out.println(matcher.matches()); ログイン後にコピー
Pattern pattern=Pattern.compile("\\d+"); //创建Pattern对象String str="1234 I am a hero"; //需要匹配的字符串Matcher matcher=pattern.matcher(str);//开头的1234匹配到了,因此返回true,如果str="I am a hero 1234"将返回falseSystem.out.println(matcher.lookingAt()); ログイン後にコピー
Pattern pattern=Pattern.compile("\\d+"); //创建Pattern对象String str="1234 I am a hero 33455"; //需要匹配的字符串Matcher matcher=pattern.matcher(str);if(matcher.lookingAt()) { System.out.println("开始匹配到下标为"+matcher.start()); //0System.out.println("匹配结束的下标为"+matcher.end()); //4System.out.println("匹配的字符串为"+matcher.group()); //1234} ログイン後にコピー
Pattern pattern=Pattern.compile("\\d+"); //创建Pattern对象 String str="1234 I am a hero 6666 chenjiabing8888"; //需要匹配的字符串 Matcher matcher=pattern.matcher(str); while(matcher.find()) //如果还有匹配的字符序列 { System.out.println("开始匹配到下标为"+matcher.start()); System.out.println("匹配结束的下标为"+matcher.end()); System.out.println("匹配的字符串为"+matcher.group()); } /*结果如下: * 开始匹配到下标为0 匹配结束的下标为4 匹配的字符串为1234 开始匹配到下标为17 匹配结束的下标为21 匹配的字符串为6666 开始匹配到下标为33 匹配结束的下标为37 匹配的字符串为8888 */ /* * 从上面返回的结果可以知道,find()可以匹配多次只要这个字符串还有可以匹配, * 并且每次的匹配字段的开始下标都是上一次匹配的结束字母的下一个下标 */ ログイン後にコピー
Pattern pattern=Pattern.compile("\\d+"); String str="chenjiabing2344cal3445"; Matcher matcher=pattern.matcher(str); str=matcher.replaceFirst("陈加兵"); System.out.println(str); //输出:chenjiabing陈加兵cal3445/* * str=matcher.replaceAll("陈加兵"); * System.out.println(str) //输出:chenjiabing陈加兵cal陈加兵 */ ログイン後にコピー 捕获组
((A)(B(C))) (A) (B(C)) (C) ログイン後にコピー
Pattern pattern=Pattern.compile("(\\D*)(\\d+)\\s(\\D+)"); Matcher matcher=pattern.matcher("chenjiabingshizuibangde6666 chenjiabign");if(matcher.find()) { System.out.println("总共匹配到了"+matcher.groupCount()+"个分组"); System.out.println("匹配到整个字符串为"+matcher.group(0)); System.out.println("匹配到的第一个字符串为"+matcher.group(1)); System.out.println("匹配到的第二个字符串为"+matcher.group(2)); System.out.println("匹配到的第三个字符串为"+matcher.group(3)); } ログイン後にコピー 贪婪模式和非贪婪模式
实例//使用了贪婪模式,因此当匹配到第一个</div>的时候还要向后面匹配看看是否还能匹配到,由于后面还有</div>结尾的,因此还是能够匹配的,因此匹配到的是:陈加兵</div><div>郑元梅Pattern pattern=Pattern.compile("<div>(.*)</div>"); //使用了非贪婪模式,因此当匹配到第一个</div>的时候就不向后面匹配了,直接返回了,因此匹配到的是:陈加兵Pattern pattern1=Pattern.compile("<div>(.*?)</div>"); String str="<div>陈加兵</div><div>郑元梅</div>"; Matcher matcher=pattern1.matcher(str);if(matcher.find()) { System.out.println(matcher.groupCount()); //1System.out.println(matcher.group(1)); //输出匹配到的字符串,此时输出的是:陈加兵,如果使用贪婪模式输出的是:陈加兵</div><div>郑元梅} ログイン後にコピー |
以上がJavaの正規表現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。