|
步骤 2 : 零个或多个 步骤 3 : 一个或多个 步骤 4 : 匹配次数 步骤 5 : 次数区间 步骤 6 : 至少几次 步骤 7 : 防止过度匹配 步骤 8 : 练习-重复匹配
-?\d\d\d 表示三个连续的数字,前面有一个-或者没有-
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
String[] ps = { "-?\\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");
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("没有找到匹配的字符串");
}
}
}
-*\d\d\d 表示三个连续的数字,前面有零个-或者多个-
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
String[] ps = { "-*\\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");
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("没有找到匹配的字符串");
}
}
}
-+\d\d\d 表示三个连续的数字,前面有一个-或者多个-
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
String[] ps = { "-+\\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");
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("没有找到匹配的字符串");
}
}
}
\d{3}表示三个连续的数字, 和 \d\d\d 一样的效果
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
String[] ps = { "\\d{3}" };
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("没有找到匹配的字符串");
}
}
}
\d{3,4}表示至少3个连续的数字,最多4个连续的数字。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
String[] ps = { "\\d{3,4}" };
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("没有找到匹配的字符串");
}
}
}
\d{3,}表示至少3个连续的数字,上不封顶
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
String[] ps = { "\\d{3,}" };
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("没有找到匹配的字符串");
}
}
}
[A-Z]{3}.*\d{3} 表示以3个字母开始,3个数字结束的匹配模式。 .* 表示中间是任意符号,任意数量。
在默认情况下 .* 是贪婪模式,会尽可能多的匹配多的字符。 所以匹配结果就是 ABS 041 2. SNIS--556 3. MXBD---197 4. MGD692 5. SNIS----5567 6. ASW-132 因为这个结果满足匹配条件,往往导致过度匹配 然而,我们在.* 后面加一个?后,就表示懒惰模式,尽可能匹配少的 [A-Z]{3}.*?\d{3} 表示以3个字母开始,3个数字结束的匹配模式。 .*? 表示中间是任意符号,任意数量,但是尽量少匹配,只要满足最低要求就行。 这样就会找到如下结果: ABS 041 SNIS--556 MXBD---197 MGD692 SNIS----556 ASW-132 import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
String[] ps = { "[A-Z]{3}.*\\d{3}","[A-Z]{3}.*?\\d{3}" };
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("没有找到匹配的字符串");
}
}
}
借助正则表达式,统计这段html一共有多少个超链
<a href="http://sina.com.cn">sina.com.cn</a> <a href="http://sina.com.cn">sina.com.cn</a> <a href="http://sina.com.cn">sina.com.cn</a> <a href="http://sina.com.cn">sina.com.cn</a> <a href="http://sina.com.cn">sina.com.cn</a>
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|