how2j.cn

步骤 1 : 元字符概念   
步骤 2 : 匹配特殊空白字符   
步骤 3 : 匹配数字   
步骤 4 : 匹配字母和数字   
步骤 5 : 匹配空白字符   
步骤 6 : 匹配十六进制或八进制   
步骤 7 : 两种元字符   
步骤 8 : 练习-元字符   

根据前面的学习,知道了[a] 是匹配一个字符a的意思,但是如果要匹配[本身怎么办呢?
[ 这样的字符,就叫做元字符,为了匹配元字符,就需要进行转义
使用\[这样的方式,在Java中,因为\本身是转义的意思,所以需要使用 \\[这样的方式

在本例中,使用 String\\[\\] 匹配字符串 String[]
元字符概念
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex { public static void main(String[] args) { String p = "String\\[\\]"; StringBuffer targetString = new StringBuffer(); targetString.append("public static void main(String[] args) {}"); Pattern pattern = Pattern.compile(p,Pattern.UNICODE_CHARACTER_CLASS); Matcher matcher = pattern.matcher(targetString); System.out.println("目标字符串:\t" + targetString); System.out.println("匹配模式:\t" + p); boolean found = false; while (matcher.find()) { System.out.format("找到匹配的字符串:" + " \"%s\" 开始位置是 " + "index %d 结束位置是 index %d.%n", matcher.group(), matcher.start(), matcher.end()); found = true; } if (!found) System.out.println("没有找到匹配的字符串"); } }
步骤 2 :

匹配特殊空白字符

edit
空白字符是" "
而回车符、换行符、制表符 等等是 特殊空白字符
如果要匹配这些特殊空白字符,就必须使用转义字符\
本例使用\t 制表符作为匹配模式
其他的特殊空白字符包括
\f 制表符
\r 回车符
\n 换行符
\v 垂直制表符

详细请参考 特殊元字符
匹配特殊空白字符
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex { public static void main(String[] args) { String p = "\t"; StringBuffer targetString = new StringBuffer(); targetString.append("public\tstatic"); Pattern pattern = Pattern.compile(p,Pattern.UNICODE_CHARACTER_CLASS); Matcher matcher = pattern.matcher(targetString); System.out.println("目标字符串:\t" + targetString); System.out.println("匹配模式:\t" + p); boolean found = false; while (matcher.find()) { System.out.format("找到匹配的字符串:" + " \"%s\" 开始位置是 " + "index %d 结束位置是 index %d.%n", matcher.group(), matcher.start(), matcher.end()); found = true; } if (!found) System.out.println("没有找到匹配的字符串"); } }
数字区间 [0-9] 代表一个数字
也可以用元字符 \d 代表一个数字
匹配数字
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex { public static void main(String[] args) { String p = "\\d\\d\\d"; StringBuffer targetString = new StringBuffer(); targetString.append("1. ABS 041 2. SNIS-556 3. MXBD-197 4. MGD692 5. SNIS-5567 6. ASW-132"); Pattern pattern = Pattern.compile(p,Pattern.UNICODE_CHARACTER_CLASS); Matcher matcher = pattern.matcher(targetString); System.out.println("目标字符串:\t" + targetString); System.out.println("匹配模式:\t" + p); boolean found = false; while (matcher.find()) { System.out.format("找到匹配的字符串:" + " \"%s\" 开始位置是 " + "index %d 结束位置是 index %d.%n", matcher.group(), matcher.start(), matcher.end()); found = true; } if (!found) System.out.println("没有找到匹配的字符串"); } }
步骤 4 :

匹配字母和数字

edit
[0-9a-zA-Z] 代表一个数字或字母
也可以用元字符 \w 代表一个数字或字母
匹配字母和数字
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex { public static void main(String[] args) { String p = "\\w\\w\\w\\w"; StringBuffer targetString = new StringBuffer(); targetString.append("1. ABS 041 2. SNIS-556 3. MXBD-197 4. MGD692 5. SNIS-5567 6. ASW-132"); Pattern pattern = Pattern.compile(p,Pattern.UNICODE_CHARACTER_CLASS); Matcher matcher = pattern.matcher(targetString); System.out.println("目标字符串:\t" + targetString); System.out.println("匹配模式:\t" + p); boolean found = false; while (matcher.find()) { System.out.format("找到匹配的字符串:" + " \"%s\" 开始位置是 " + "index %d 结束位置是 index %d.%n", matcher.group(), matcher.start(), matcher.end()); found = true; } if (!found) System.out.println("没有找到匹配的字符串"); } }
步骤 5 :

匹配空白字符

edit
\s 可以匹配所有的 特殊空白字符 和普通空白字符 " "

本例的匹配模式是 \d\.\s, 匹配三个字符,分别是数字 点 和空白
匹配空白字符
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex { public static void main(String[] args) { String p = "\\d\\.\\s"; StringBuffer targetString = new StringBuffer(); targetString.append("1.\tABS 041 2. SNIS-556 3. MXBD-197 4. MGD692 5. SNIS-5567 6. ASW-132"); Pattern pattern = Pattern.compile(p,Pattern.UNICODE_CHARACTER_CLASS); Matcher matcher = pattern.matcher(targetString); System.out.println("目标字符串:\t" + targetString); System.out.println("匹配模式:\t" + p); boolean found = false; while (matcher.find()) { System.out.format("找到匹配的字符串:" + " \"%s\" 开始位置是 " + "index %d 结束位置是 index %d.%n", matcher.group(), matcher.start(), matcher.end()); found = true; } if (!found) System.out.println("没有找到匹配的字符串"); } }
步骤 6 :

匹配十六进制或八进制

edit
十六进制的41对应 十进制的 65,即对应大写的字母A
\x41 表示通过十六进制的方式匹配大写字母A
\0101 表示通过八进制的方式匹配大写字母A
匹配十六进制或八进制
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex { public static void main(String[] args) { String[] ps = { "\\x41", "\\0101" }; StringBuffer targetString = new StringBuffer(); targetString.append("1. ABS 041 2. SNIS-556 3. MXBD-197 4. MGD692 5. SNIS-5567 6. ASW-132"); System.out.println("目标字符串:\t" + targetString); for (String p : ps) { System.out.println(); Pattern pattern = Pattern.compile(p); Matcher matcher = pattern.matcher(targetString); System.out.println("匹配模式:\t" + p); boolean found = false; while (matcher.find()) { System.out.format("找到匹配的字符串:" + " \"%s\" 开始位置是 " + "index %d 结束位置是 index %d.%n", matcher.group(), matcher.start(), matcher.end()); found = true; } if (!found) System.out.println("没有找到匹配的字符串"); } } }
根据上面学习的知识,可以总结,元字符有两种
1. . [ ] 这样的本身就是元字符,加上反斜杠之后,\. \[ \]就变成普通字符了
2. d w t 这样的,本身是普通字符 加上反斜杠之后,\d \w \t 就变成元字符了

更多的元字符参考 元字符清单
步骤 8 :

练习-元字符

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
通过上面的学习,根据 元字符清单
匹配连续3个非数字
匹配非字母和数字
匹配连续4个非空白


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 Temp-正则表达式-元字符 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图