如何使用Java自带的正则表达式

   正则表达式是个极端强大工具,提供了更强大的字符串处理能力,而且在字符串模式-匹配和字符串模式-替换方面富有弹性。Java JDK自 1.40版本就自带了支持正则表达式的包java.util.regex。在regex包中包括了两个类:Pattern(模式类)和Matcher(匹配器类)。Pattern类是用来表达和陈述所要搜索模式的对象,Matcher类是真正影响搜索的对象。另加一个新的例外类,PatternSyntaxException,当遇到不合法的搜索模式时,会抛出例外

(1)Pattern类和Matcher类

   Pattern类的实例表示以字符串形式指定的正则表达式(正则表达式是以字符串的形式给出来的,但就其本身来说并不是字符串,因为他有语法),其语法类似于Perl所用的语法。

用字符串形式指定的正则表达式,必须先编译成Pattern类的实例。生成的模式用于创建Matcher对象,它根据正则表达式与任意字符序列进行匹配。多个匹配器可以共享一个模式,因为它是非专属的。

  用compile方法把给定的正则表达式编译成模式,然后用matcher方法创建一个匹配器,这个匹配器将根据此模式对给定的输入串进行匹配。pattern 方法可返回编译这个模式所用的正则表达式。

        String str="aaabc efg ABC"; //待处理的字符串


        String regEx="aaa|fff";   //指定正则表达式


        Pattern p=Pattern.compile(regEx);//编译成模式

        Matcher m=p.matcher(str);//创建一个匹配器

        if( m.matches()){

          .... .....

        }

匹配器创建之后,就可以用它来执行三类不同的匹配操作:

matches方法根据此模式,对整个输入序列进行匹配。

lookingAt方法根据此模式,从开始处对输入序列进 行匹配。

find方法扫描输入序列,寻找下一个与模式匹配的地方。

这些方法都会返回一个表示成功或失败的布尔值。如果匹配成功,通过查询匹配器的状态,可以获得更多的信息。

(2)java构建正则表达式字符串的语法

正则表达式的语法要素有以下这些:常规字符,字符类(字符集合),通配符,量词,边界匹配符,运算符,组,标志序列

\d  等於 [0-9] 数字

\D  等於 [^0-9] 非数字

\s  等於 [ \t\n\x0B\f\r] 空白字符

\S  等於 [^ \t\n\x0B\f\r] 非空白字符

\w  等於 [a-zA-Z_0-9] 数字或是英文字

\W 等於 [^a-zA-Z_0-9] 非数字与英文字

$ 表示每行的结尾

. 匹配所有字符,包括空格、Tab字符甚至换行符

| 或 []方括号只允许匹配单个字符

^ 符号称为否符号。如果用在方括号内,表示不想要匹配的字符。 表示每行的开头

( ) 形成一个组合类型。如果想让它解释为字面上意思(即圆括号),也需要在它前面用双反斜

       线符 (\)将它转义为普通含义,否则被视为政治表达式中的特殊字符。

\b元字符是用来说明匹配单词的边界,它可以是空格或任何一种不同的标点符号(包括逗号,

     句号等)。

+ 匹配1次或多次

* 匹配0次或多次

? 匹配0次或1次

eg:

String bad = "\\b(\\w+)\\s+\\1\\b";
\b:是单词的边界符,\1:。向后扫描的次数;该表达式匹配的是:它有一个或多个空格符,后面还跟有一个与此相同的单词

(3)对字符串的处理

     Pattern类中预定义了许多静态标志,来进步一规范表达式。

不区分大小写的替换(符合reg中定义的字符串用***替换)

Matcher m = Pattern.compile(reg, Pattern.CASE_INSENSITIVE).matcher(str)

if(m.find()){
       System.out.println(m.replaceAll("***"));
 }

(4)java中使用正则表达式的方法

在String中有四个方法可以使用正则表达式,它们是matches、split、replaceAll和replaceFirst。

      String bad = "\\b(\\w+)\\s+\\1\\b"; 
     String[] str = {"Paris in the the spring","TJnndde","SHnnDde"};
     for(String s : str){
        System.out.println(s.replaceAll(bad, "*"));
       }

猜你喜欢

转载自sherryxiu.iteye.com/blog/1231013