/*
*/
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());
}
}
}
从0到3匹配模式子序列:9A0
从3到6匹配模式子序列:0A3
不完全匹配
9A0
3
/*
*/
importjava.util.regex.*;
class String_1
{
publicstaticvoid main(String[] args)
{
Pattern p;
Matcher m;
String s="2014年 07月 22日16点,淄博淄川";
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);
}
}
}
从0到4匹配模式子序列:
2014
从7到9匹配模式子序列:
07
从11到13匹配模式子序列:
22
从14到16匹配模式子序列:
16
从4到7匹配模式子序列:
年
从9到11匹配模式子序列:
月
从13到14匹配模式子序列:
日
从16到22匹配模式子序列:
点,淄博淄川
---------------------------------------------------------------------------------------------------------------------------------------------------------------
元字符 |
描述 |
备注 |
例子 |
|
. |
匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。 |
可连续多个使用,见例2 |
[1] sale. 匹配单个任意字符 [2] sale….. 匹配多个任意字符 |
|
| |
逻辑或操作符 |
|
|
|
[ ] |
字符集合。匹配所包含的任意一个字符。 |
集合里面可以用的元字符有”-“ 要避免右边界字符小于左字符的情况。 在集合里面,”.”, “+” 将被看做字符本身,而不是特殊字符,当然也可以转义使用。 |
[1] [0-9] [2] [A-Z] [3] [0-9A-Z] [1] |
|
[^ ] |
字符集合求非。匹配未包含的任意字符。 |
本符号只有出现在[] 里面并且是紧跟左方括号[ 时,才表示求非。 |
|
|
- |
字符范围。匹配指定范围内的任意字符。 |
|
|
|
\ |
对下一个字符转义 |
永远出现在一个具有特殊含义的字符序列之前。 |
|
|
元字符 |
描述 |
备注 |
例子 |
|
* |
匹配前面的子表达式零次或多次。等价于 {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,} 的懒惰版本。 |
|
|
|
元字符 |
描述 |
备注 |
例子 |
|
^ |
匹配输入字符串的开始位置。如果设置了 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*//.*$ 将匹配行首为空白字符后面跟着// 的一行。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
元字符 |
描述 |
备注 |
例子 |
|
\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_]'。 |
|
|
|
元字符 |
描述 |
备注 |
例子 |
|
( ) |
是一个更大的表达式的一部分。另一个作用是把子表达式当作一个元素使用。 |
子表达式允许嵌套。 |
[1] ( ){2, } 匹配2个以上的连续的“ ” [2] (19|20)\d{2} 以19或者20开头的年份。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
回溯引用概念 --- 在模式的后半部分引用在前半部分中定义的子表达式。
元字符 |
描述 |
备注 |
例子 |
|
\数字 |
数字表示匹配前半部分模式中的第几个子表达式。 \1 匹配第一个,\2 匹配第二个,如此类推。 |
只匹配子表达式。 很多正则表达式实现中,\0 匹配整个正则表达式。 |
[1] <[hH]([1-6])>.*?</ [hH]\1> 在html语言中寻找配对的标题记号。其中,\1 表示之前匹配到的在 1~6 中的一个数字。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
向前查找概念 --- 指定一个必须匹配但不在结果中返回的模式。
元字符 |
描述 |
备注 |
例子 |
|
?= |
向前查找操作符。 |
|
[1] .+(?=:) 作用:匹配网址里面的协议部分,但是不包括分号。例如, http://www.163.com/ https://www.163.com/ ftp://ftp.163.com
|
|
?<= |
向后查找操作符。 |
有些正则表达式的实现不支持向后查找。 向后查找不能使用 + * 等不确定数量的元字符。 |
[1] (?<=\$)[0-9.]+ 作用:把以美元符号开头的金额找出来,但是不包括美元符号。例如, $5.32 $899.00
|
|
?! |
负向前查找操作符。 |
|
|
|
?<! |
负向后查找操作符。查找与模式不匹配的文本。 |
|
[1] \b(?<!\$)\d+\b 不以美元符号开头的数字。 |
|
|
|
|
|
|
|
|
|
|
|
元字符 |
描述 |
备注 |
例子 |
|
[\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 为八进制转义值。 |
|
|
|