“正则表达式 分组”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
第139行: | 第139行: | ||
找到第2个分组的内容:8 | 找到第2个分组的内容:8 | ||
找到第3个分组的内容:9 | 找到第3个分组的内容:9 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === 示例:通过命名分组 === | ||
+ | <syntaxhighlight lang="java"> | ||
+ | import java.util.regex.Matcher; | ||
+ | import java.util.regex.Pattern; | ||
+ | |||
+ | public class RegExp07 { | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | |||
+ | String content = "hanshunping s7789 nn1189han"; | ||
+ | |||
+ | /* | ||
+ | * 命名分组:即可以给分组取名 | ||
+ | */ | ||
+ | String regStr = "(?<g1>\\d\\d)(?<g2>\\d\\d)"; //匹配4个数字字符的字符串 | ||
+ | |||
+ | Pattern pattern = Pattern.compile(regStr); | ||
+ | |||
+ | Matcher matcher = pattern.matcher(content); | ||
+ | |||
+ | while (matcher.find()) { | ||
+ | |||
+ | System.out.println("找到:" + matcher.group(0)); | ||
+ | |||
+ | System.out.println("找到第1个分组的内容:" + matcher.group(1)); | ||
+ | |||
+ | System.out.println("找到分组g1的内容:" + matcher.group("g1")); | ||
+ | |||
+ | System.out.println("找到第2个分组的内容:" + matcher.group(2)); | ||
+ | |||
+ | System.out.println("找到分组g2的内容:" + matcher.group("g2")); | ||
+ | |||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight><syntaxhighlight lang="console"> | ||
+ | 找到:7789 | ||
+ | 找到第1个分组的内容:77 | ||
+ | 找到分组g1的内容:77 | ||
+ | 找到第2个分组的内容:89 | ||
+ | 找到分组g2的内容:89 | ||
+ | 找到:1189 | ||
+ | 找到第1个分组的内容:11 | ||
+ | 找到分组g1的内容:11 | ||
+ | 找到第2个分组的内容:89 | ||
+ | 找到分组g2的内容:89 | ||
</syntaxhighlight> | </syntaxhighlight> |
2022年11月18日 (五) 11:44的最新版本
https://www.bilibili.com/video/BV1Eq4y1E79W?p=13
常用分组构造形式 | 说明 |
---|---|
(pattern) | 非命名捕获。捕获匹配的子字符串。
编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其它捕获结果则根据左括号的顺序从1开始自动编号 |
(?<name>pattern) | 命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。
用于name的字符串不能包含任何标点符号,并且不能以数字开头。 可以使用单引号替代尖括号,例如(?'name') |
对比示例:应用分组前
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp07 {
public static void main(String[] args) {
String content = "hanshunping s7789 nn1189han";
String regStr = "\\d\\d\\d\\d"; //匹配4个数组的字符串
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
System.out.println("找到:" + matcher.group(0));
}
}
}
找到:7789
找到:1189
示例:应用分组
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp07 {
public static void main(String[] args) {
String content = "hanshunping s7789 nn1189han";
/*
* 下面就是非命名分组
* 说明
* 1、matcher.group(0) 得到匹配到的字符串
* 2、matcher.group(1) 得到匹配到的字符串的第1个分组
* 3、matcher.group(2) 得到匹配到的字符串的第2个分组
*/
String regStr = "(\\d\\d)(\\d\\d)"; //匹配4个数字字符的字符串
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
System.out.println("找到:" + matcher.group(0));
System.out.println("找到第1个分组的内容:" + matcher.group(1));
System.out.println("找到第2个分组的内容:" + matcher.group(2));
}
}
}
找到:7789
找到第1个分组的内容:77
找到第2个分组的内容:89
找到:1189
找到第1个分组的内容:11
找到第2个分组的内容:89
示例:在"hanshunping s7789 nn1189han" 匹配 "(\\d\\d)(\\d)(\\d)"
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp07 {
public static void main(String[] args) {
String content = "hanshunping s7789 nn1189han";
/*
* 下面就是非命名分组
* 说明
* 1、matcher.group(0) 得到匹配到的字符串
* 2、matcher.group(1) 得到匹配到的字符串的第1个分组
* 3、matcher.group(2) 得到匹配到的字符串的第2个分组
*/
String regStr = "(\\d\\d)(\\d)(\\d)"; //匹配4个数字字符的字符串
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
System.out.println("找到:" + matcher.group(0));
System.out.println("找到第1个分组的内容:" + matcher.group(1));
System.out.println("找到第2个分组的内容:" + matcher.group(2));
System.out.println("找到第3个分组的内容:" + matcher.group(3));
}
}
}
找到:7789
找到第1个分组的内容:77
找到第2个分组的内容:8
找到第3个分组的内容:9
找到:1189
找到第1个分组的内容:11
找到第2个分组的内容:8
找到第3个分组的内容:9
示例:通过命名分组
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp07 {
public static void main(String[] args) {
String content = "hanshunping s7789 nn1189han";
/*
* 命名分组:即可以给分组取名
*/
String regStr = "(?<g1>\\d\\d)(?<g2>\\d\\d)"; //匹配4个数字字符的字符串
Pattern pattern = Pattern.compile(regStr);
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
System.out.println("找到:" + matcher.group(0));
System.out.println("找到第1个分组的内容:" + matcher.group(1));
System.out.println("找到分组g1的内容:" + matcher.group("g1"));
System.out.println("找到第2个分组的内容:" + matcher.group(2));
System.out.println("找到分组g2的内容:" + matcher.group("g2"));
}
}
}
找到:7789
找到第1个分组的内容:77
找到分组g1的内容:77
找到第2个分组的内容:89
找到分组g2的内容:89
找到:1189
找到第1个分组的内容:11
找到分组g1的内容:11
找到第2个分组的内容:89
找到分组g2的内容:89