|
步骤 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("没有找到匹配的字符串");
}
}
空白字符是" "
而回车符、换行符、制表符 等等是 特殊空白字符 如果要匹配这些特殊空白字符,就必须使用转义字符\ 本例使用\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("没有找到匹配的字符串");
}
}
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("没有找到匹配的字符串");
}
}
[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("没有找到匹配的字符串");
}
}
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("没有找到匹配的字符串");
}
}
十六进制的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 就变成元字符了 更多的元字符参考 元字符清单
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|