标签:mat data builder idt unix 区分 大写 根据 报警
模式匹配-正则表达式
主要内容:匹配内容,匹配模式,实现
Java1.4起,Java核心API就引入了java.util.regex程序包,它包括两个类:Pattern和Matcher. 
Pattern是对正则表达式进行编译,得到正则表达式的表现模式。
Matcher利用Pattern得到的表现模式进行模式匹配。
Pattern类的方法简述 
| 方法 | 说明 | 
| static Pettern compile(String regex,int flag) | 编译模式,参数regex表示输入的正则表达式,flag表示模式类型(Pattern.CASE_INSENSITIVE 表示不区分大小写) | 
| Matcher matcher(CharSequence input) | 获取匹配器,input时输入的待处理的字符串 | 
| static boolean matches(String regex, CharSequence input) | 快速的匹配调用,直接根据输入的模式regex匹配input | 
| String[] split(CharSequence input,int limit) | 分隔字符串input,limit参数可以限制分隔的次数 | 
| 方法 | 说明 | 
| boolean find() | 查找模式匹配 | 
| String group() | 获得匹配 | 
| String group(int number) | 获得第number个的匹配 | 
可在Pattern类中查看所有通配符含义
符号  | 含义  | 实例  | 
?  | 子模式0次或1次  | 
  | 
*  | 子模式0次或多次  | 
  | 
+  | 子模式1次或多次  | 
  | 
{n}  | n个字符  | [abcd]{3}  | 
{n,}  | 至少n个字符  | [abcd]{3,}  | 
{n,m}  | n到m个字符  | [abcd]{3,5}  | 
.  | 任何单个字符  | 
  | 
-  | 连字符  | a-z  | 
\s  | 空白(空格符,换行符,回车符等)  | 
  | 
\S  | 非空白  | 
  | 
\d  | 数字字符  | 
  | 
\D  | 非数字字符  | 
  | 
\w  | 单词字符  | |
\W  | 非单词字符  | 
  | 
\  | 转义符  | \* 匹配*  | 
^上尖括号符  | [^]表示非,^表示起始符  | [^abd],^[0-9]+[a-z]*  | 
$  | 表示结束符  | ^[0-9]\-[a-z]+$  | 
[]  | 字符列表中的任意一个  | [abc]匹配abc中任意一个  | 
()  | 子表达式  | (abc)匹配abc  | 
|  | 或,与()进行组合  | (ab|cd|ef)  | 
| x | 字符x | 
| \ | 反斜线字符 | 
| n | 带有八进制值0的字符n(0 <= n <= 7) | 
| nn | 带有八进制值0的字符nn(0 <= n <= 7) | 
| mnn | 带有八进制值0的字符mnn(0 <= m <= 3、0 <= n <= 7) | 
| xhh | 带有十六进制值 0x的字符hh | 
| uhhhh | 带有十六进制值 0x的字符hhhh | 
| t | 制表符 (‘u0009‘) | 
| n | 新行(换行)符 (‘u000A‘) | 
| r | 回车符 (‘u000D‘) | 
| f | 换页符 (‘u000C‘) | 
| a | 报警 (bell) 符 (‘u0007‘) | 
| e | 转义符 (‘u001B‘) | 
| cx | 对应于x的控制符 | 
| [abc] | a、b或c(简单类) | 
| [^abc] | 任何字符,除了a、b或c(否定) | 
| [a-zA-Z] | a到z或A到Z,两头的字母包括在内(范围) | 
| [a-d[m-p]] | a到d或m到p:[a-dm-p](并集) | 
| [a-z&&[def]] | d、e或f(交集) | 
| [a-z&&[^bc]] | a到z,除了b和c:[ad-z](减去) | 
| [a-z&&[^m-p]] | a到z,而非m到p:[a-lq-z](减去) | 
| . | 任何字符(与行结束符可能匹配也可能不匹配) | 
| d | 数字:[0-9] | 
| D | 非数字:[^0-9] | 
| s | 空白字符:[ tnx0Bfr] | 
| S | 非空白字符:[^s] | 
| w | 单词字符:[a-zA-Z_0-9] | 
| W | 非单词字符:[^w] | 
| p{Lower} | 小写字母字符:[a-z] | 
| p{Upper} | 大写字母字符:[A-Z] | 
| p{ASCII} | 所有 ASCII:[x00-x7F] | 
| p{Alpha} | 字母字符:[p{Lower}p{Upper}] | 
| p{Digit} | 十进制数字:[0-9] | 
| p{Alnum} | 字母数字字符:[p{Alpha}p{Digit}] | 
| p{Punct} | 标点符号:!"#$%&‘()*+,-./:;<=>?@[]^_`{|}~ | 
| p{Graph} | 可见字符:[p{Alnum}p{Punct}] | 
| p{Print} | 可打印字符:[p{Graph}x20] | 
| p{Blank} | 空格或制表符:[ t] | 
| p{Cntrl} | 控制字符:[x00-x1Fx7F] | 
| p{XDigit} | 十六进制数字:[0-9a-fA-F] | 
| p{Space} | 空白字符:[ tnx0Bfr] | 
| p{javaLowerCase} | 等效于 java.lang.Character.isLowerCase() | 
| p{javaUpperCase} | 等效于 java.lang.Character.isUpperCase() | 
| p{javaWhitespace} | 等效于 java.lang.Character.isWhitespace() | 
| p{javaMirrored} | 等效于 java.lang.Character.isMirrored() | 
| p{InGreek} | Greek 块(简单块)中的字符 | 
| p{Lu} | 大写字母(简单类别) | 
| p{Sc} | 货币符号 | 
| P{InGreek} | 所有字符,Greek 块中的除外(否定) | 
| [p{L}&&[^p{Lu}]] | 所有字母,大写字母除外(减去) | 
| ^ | 行的开头 | 
| $ | 行的结尾 | 
| b | 单词边界 | 
| B | 非单词边界 | 
| A | 输入的开头 | 
| G | 上一个匹配的结尾 | 
| Z | 输入的结尾,仅用于最后的结束符(如果有的话) | 
| z | 输入的结尾 | 
| X? | X,一次或一次也没有 | 
| X* | X,零次或多次 | 
| X+ | X,一次或多次 | 
| X{n} | X,恰好n次 | 
| X{n,} | X,至少n次 | 
| X{n,m} | X,至少n次,但是不超过m次 | 
| X?? | X,一次或一次也没有 | 
| X*? | X,零次或多次 | 
| X+? | X,一次或多次 | 
| X{n}? | X,恰好n次 | 
| X{n,}? | X,至少n次 | 
| X{n,m}? | X,至少n次,但是不超过m次 | 
| X?+ | X,一次或一次也没有 | 
| X*+ | X,零次或多次 | 
| X++ | X,一次或多次 | 
| X{n}+ | X,恰好n次 | 
| X{n,}+ | X,至少n次 | 
| X{n,m}+ | X,至少n次,但是不超过m次 | 
| XY | X后跟Y | 
| X|Y | X或Y | 
| (X) | X,作为捕获组 | 
| n | 任何匹配的nth捕获组 | 
| Nothing,但是引用以下字符 | |
| Q | Nothing,但是引用所有字符,直到E | 
| E | Nothing,但是结束从Q开始的引用 | 
| (?:X) | X,作为非捕获组 | 
| (?idmsux-idmsux) | Nothing,但是将匹配标志idmsux on - off | 
| (?idmsux-idmsux:X) | X,作为带有给定标志idmsux on - off | 
| (?=X) | X,通过零宽度的正 lookahead | 
| (?!X) | X,通过零宽度的负 lookahead | 
| (?<=X) | X,通过零宽度的正 lookbehind | 
| (?<!X) | X,通过零宽度的负 lookbehind | 
| (?>X) | X,作为独立的非捕获组 | 
for (String str : dataArr) {String patternStr="m(o+)n";boolean result = Pattern.matches(patternStr, str);
if (result) {System.out.println("字符串"+str+"匹配模式"+patternStr+"成功");}
else{System.out.println("字符串"+str+"匹配模式"+patternStr+"失败");}
}
//匹配替换Pattern p = Pattern.compile("m(o+)n",Pattern.CASE_INSENSITIVE);
// 用Pattern类的matcher()方法生成一个Matcher对象
Matcher m = p.matcher("moon mooon Mon mooooon Mooon");
StringBuffer sb = new StringBuffer();
// 使用find()方法查找第一个匹配的对象
boolean result = m.find();
// 使用循环找出模式匹配的内容替换之,再将内容加到sb里
while (result) {
m.appendReplacement(sb, "moon");result = m.find();
}
// 最后调用appendTail()方法将最后一次匹配后的剩余字符串加到sb里;
m.appendTail(sb);
System.out.println("替换后内容是" + sb.toString());//正则表达式切割String input="职务=GM 薪水=50000 , 姓名=职业经理人 ; 性别=男 年龄=45 ";
String patternStr="(\s*,\s*)|(\s*;\s*)|(\s+)";
Pattern pattern=Pattern.compile(patternStr);
String[] dataArr=pattern.split(input);
for (String str : dataArr) {
System.out.println(str);
}//注意这里要把复杂的模式写在前面,否则简单模式会先匹配上.String input="职务=GM 薪水=50000 , 姓名=职业经理人 ; 性别=男 年龄=45 ";
String patternStr="(\s*,\s*)|(\s*;\s*)|(\s+)";
Pattern pattern=Pattern.compile(patternStr);
String[] dataArr=pattern.split(input);
for (String str : dataArr) {
System.out.println(str);
}
标签:mat data builder idt unix 区分 大写 根据 报警
原文地址:http://www.cnblogs.com/stone-d/p/7257394.html