模式匹配学习笔记

/*

 

 

 

 

 

*/

importjava.util.regex.*;

class String_1

{

    publicstaticvoid main(String[] args)

    {

        Pattern p;

        Matcher m;

        String s1="9A00A3";

        p=Pattern.compile("\\dA\\d");

        m=p.matcher(s1);

        while(m.find())

        {

            String str=m.group();

            System.out.print(""+m.start()+""+m.end()+"匹配模式子序列:");

            System.out.println(str);

        }

        if(m.matches())

        {

            String str=m.group();

            System.out.println(s1);

        }

        else{

            System.out.println("不完全匹配");

        }

        if(m.lookingAt())

        {

            String str=m.group();

            System.out.println(str);

            System.out.println(m.end());

        }

       

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

03匹配模式子序列:9A0

36匹配模式子序列:0A3

不完全匹配

9A0

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/*

 

 

 

 

 

*/

importjava.util.regex.*;

class String_1

{

    publicstaticvoid main(String[] args)

    {

        Pattern p;

        Matcher m;

        String s="2014 07 2216点,淄博淄川";

        p=Pattern.compile("\\d+");

        m=p.matcher(s);

        while(m.find())

        {

            String str;

            str=m.group();

            System.out.println(""+m.start()+""+m.end()+"匹配模式子序列:");

            System.out.println(str);

        }

        p=Pattern.compile("\\D+");

        m=p.matcher(s);

        while(m.find())

        {

            String str;

            str=m.group();

            System.out.println(""+m.start()+""+m.end()+"匹配模式子序列:");

            System.out.println(str);

        }

       

}

}

 

 

 

 

 

04匹配模式子序列:

2014

79匹配模式子序列:

07

1113匹配模式子序列:

22

1416匹配模式子序列:

16

47匹配模式子序列:

 

911匹配模式子序列:

1314匹配模式子序列:

1622匹配模式子序列:

点,淄博淄川

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------

 
 

元字符分类  

 

1.      基本元字符

 

元字符

描述

备注

例子

 

.   

匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。

可连续多个使用,见例2

[1]     sale.   匹配单个任意字符

[2]     sale…..   匹配多个任意字符

 

|      

逻辑或操作符

 

 

 

[  ]

字符集合。匹配所包含的任意一个字符。

集合里面可以用的元字符有”-“

要避免右边界字符小于左字符的情况。

在集合里面,”.”, “+” 将被看做字符本身,而不是特殊字符,当然也可以转义使用。

[1]     [0-9]

[2]     [A-Z]

[3]     [0-9A-Z]

[1]    

 

[^   ]

字符集合求非。匹配未包含的任意字符。

本符号只有出现在[] 里面并且是紧跟左方括号[ 时,才表示求非。

 

 

-     

字符范围。匹配指定范围内的任意字符。

 

 

 

\    

对下一个字符转义

永远出现在一个具有特殊含义的字符序列之前。

 

 

 

 

 

 

 

 

 

 

2.      次数元字符

 

元字符

描述

备注

例子

 

*   

匹配前面的子表达式零次或多次。等价于  {0,}

如果是在字符集合后面使用,则加号必须放在“[”后面。

[1]     [0-9]*

[2]     [A-Z]*

[3]     [0-9A-Z]*

 

 

*?      

*的懒惰版本。

懒惰型与贪婪型的区别:贪婪型尽可能地从文本开头匹配到文本末。懒惰型则是匹配尽可能少的文本。

对于文本  <b>AK</b>  <b>hi</b> ,

贪婪型(<b>.*</b>)会匹配到第二个</b>,而懒惰型(<b>.*?</b>)则匹配到第一个。

 

+

匹配前面的子表达式一次或多次。等价于  {1,}

如果是在字符集合后面使用,则加号必须放在“[”后面。

[1]     [0-9]+

[2]     [A-Z]+

[3]     [0-9A-Z]+

 

 

+?

+的懒惰版本。

 

 

 

?    

匹配前面的子表达式零次或一次。等价于  {0,1}

 

[1]     https?

 

{n}

匹配确定的 n 次。

 

[1]     \d{6}

 

{n,m}

其中n <= m。最少匹配 n 次且最多匹配 m 次。

 

[1]     \d{2,4}

 

{n,}

至少匹配n 次。

 

[1]     \d{2,   }

 

{n,}?

{n,} 的懒惰版本。

 

 

 

 

 

 

 

3.      位置元字符

 

元字符

描述

备注

例子

 

^       

匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。

 

 

 

$

匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。

 

 

 

\b

匹配一个单词边界,也就是指单词和空格间的位置。

匹配的是

[/w] [^/w] 之间的位置。

\w 对应的是字母、数字、下划线。

[1]     \bcat\b

可以匹配到一个前后为空格的“cat”单词。

 

\B  

匹配非单词边界。

与 /b 相反。

应该是等价于 [/w][/w] 之间或者 [^/w] [^/w] 之间的位置。

[1]     \B-\B

可以匹配到“nine-digit”中的连字符。

 

?m

分行匹配模式,使得 $  和 ^  能匹配换行符(\n)前后的位置。

必须出现在整个模式的最前面。

[1]     (?m)^\s*//.*$     

将匹配行首为空白字符后面跟着//  的一行。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.      匹配数字、字母、空白字符

元字符

描述

备注

例子

 

\d

匹配一个数字字符。等价于 [0-9]。

 

 

 

\D

匹配一个非数字字符。等价于 [^0-9]。

 

 

 

\s

匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

 

 

 

\S

匹配任何非空白字符。等价于 [^\f\n\r\t\v]。

 

 

 

\w

匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。

 

 

 

\W

匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。

 

 

 

 

 

 

5.      子表达式

 

元字符

描述

备注

例子

 

(  )

是一个更大的表达式的一部分。另一个作用是把子表达式当作一个元素使用。

子表达式允许嵌套。

[1]     (&nbsp;){2, }

匹配2个以上的连续的“&nbsp;”

[2]     (19|20)\d{2}

以19或者20开头的年份。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.      回溯引用

回溯引用概念  --- 在模式的后半部分引用在前半部分中定义的子表达式。

 

 

元字符

描述

备注

例子

 

\数字

数字表示匹配前半部分模式中的第几个子表达式。 \1 匹配第一个,\2 匹配第二个,如此类推。

只匹配子表达式。

很多正则表达式实现中,\0 匹配整个正则表达式。

[1]     <[hH]([1-6])>.*?</ [hH]\1>

在html语言中寻找配对的标题记号。其中,\1 表示之前匹配到的在 1~6 中的一个数字。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7.      前后查找

向前查找概念  --- 指定一个必须匹配但不在结果中返回的模式。

 

元字符

描述

备注

例子

 

?=

向前查找操作符。

 

[1]     .+(?=:)

作用:匹配网址里面的协议部分,但是不包括分号。例如,

http://www.163.com/

https://www.163.com/

ftp://ftp.163.com

 

 

?<=

向后查找操作符。

有些正则表达式的实现不支持向后查找。

向后查找不能使用 +  * 等不确定数量的元字符。

[1]     (?<=\$)[0-9.]+

作用:把以美元符号开头的金额找出来,但是不包括美元符号。例如,

$5.32

$899.00

 

 

?!

负向前查找操作符。

 

 

 

?<!

负向后查找操作符。查找与模式不匹配的文本。

 

[1]     \b(?<!\$)\d+\b

不以美元符号开头的数字。

 

 

 

 

 

 

 

 

 

 

 

 

 

8.      特殊字符元字符

 

元字符

描述

备注

例子

 

[\b]       

退格字符。

 

 

 

\cx

匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。

 

 

 

\f 

匹配一个换页符。等价于 \x0c 和 \cL。

 

 

 

\n

匹配一个换行符。等价于 \x0a 和 \cJ。

 

 

 

\r

匹配一个回车符。等价于 \x0d 和 \cM。

 

 

 

\t

匹配一个制表符。

 

 

 

\v

匹配一个垂直制表符。

 

 

 

\xn

匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。

 

 

 

\0n

匹配 n,其中 n 为八进制转义值。

 

 

 

 

你可能感兴趣的:(模式匹配学习笔记)