Java 正则表达式

来源:互联网 发布:蓝光膜 知乎 编辑:程序博客网 时间:2024/04/24 04:19

来自http://www.cnblogs.com/hubingxu/archive/2012/02/17/2355516.html

       http://www.runoob.com/java/java-regular-expressions.html


一、java.util.regex 包主要包括以下三个类:

Pattern 类:pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

Matcher 类:Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

PatternSyntaxException:PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

二、方法及说明

1.find()方法是部分匹配,是查找输入串中与模式匹配的子串,如果该匹配的串有组还可以使用group()函数。

matches()是全部匹配,是将整个输入串与模式匹配,如果要验证一个输入的数据是否为数字类型或其他类型,一般要用matches()。

序号方法及说明1public boolean lookingAt() 
 尝试将从区域开头开始的输入序列与该模式匹配。2public boolean find() 
尝试查找与该模式匹配的输入序列的下一个子序列。3public boolean find(int start)
重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。4public boolean matches() 
尝试将整个区域与模式匹配。


matches 和 lookingAt 方法都用来尝试匹配一个输入序列模式。它们的不同是 matcher 要求整个序列都匹配,而lookingAt 不要求。

lookingAt 方法虽然不需要整句都匹配,但是需要从第一个字符开始匹配。

这两个方法经常在输入字符串的开始使用。


2.详解:

matches
public static boolean matches(String regex,  CharSequence input)

编译给定正则表达式并尝试将给定输入与其匹配。  
调用此便捷方法的形式  
Pattern.matches(regex, input);
Pattern.compile(regex).matcher(input).matches() ; 
如果要多次使用一种模式,编译一次后重用此模式比每次都调用此方法效率更高。
参数:
regex - 要编译的表达式
input - 要匹配的字符序列  
抛出:  
PatternSyntaxException - 如果表达式的语法无效

find
public boolean find()尝试查找与该模式匹配的输入序列的下一个子序列。  
此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。  
如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。  

matcher.start() 返回匹配到的子字符串在字符串中的索引位置. 
matcher.end()返回匹配到的子字符串的最后一个字符在字符串中的索引位置. 
matcher.group()返回匹配到的子字符串 
返回:
当且仅当输入序列的子序列匹配此匹配器的模式时才返回 true。

3.分割字符串 
Pattern pattern = Pattern.compile(expression); //正则表达式 
 String[] strs = pattern.split(str); //操作字符串 得到返回的字符串数组 

4.替换字符串 
   Pattern p = Pattern.compile(expression); // 正则表达式 
   Matcher m = p.matcher(text); // 操作的字符串 
   String s = m.replaceAll(str); //替换后的字符串 

5.查找替换指定字符串 
Pattern p = Pattern.compile(expression); // 正则表达式 
   Matcher m = p.matcher(text); // 操作的字符串 
   StringBuffer sb = new StringBuffer(); 
   int i = 0; 
   while (m.find()) { 
    m.appendReplacement(sb, str); 
    i++;    //字符串出现次数 
   } 
   m.appendTail(sb);//从截取点将后面的字符串接上 
String s = sb.toString(); 


6.查找输出字符串 
Pattern p = Pattern.compile(expression); // 正则表达式 
   Matcher m = p.matcher(text); // 操作的字符串 
   while (m.find()) { 
matcher.start() ;
matcher.end();
matcher.group(1);
  }

三、捕获组

捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。

例如,正则表达式 (dog) 创建了单一分组,组里包含"d","o",和"g"。

捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

可以通过调用 matcher 对象的 groupCount 方法来查看表达式有多少个分组。groupCount 方法返回一个 int 值,表示matcher对象当前有多个捕获组。

还有一个特殊的组(group(0)),它总是代表整个表达式。该组不包括在 groupCount 的返回值中。