如何遍历正则表达式
假设我有以下字符串:
name1=gil;name2=orit;
我想查找的所有匹配项,name=value
并确保整个字符串与模式匹配。
所以我做了以下事情:
- 确保整个模式与我想要的匹配。
Pattern p = Pattern.compile("^((\\w+)=(\\w+);)*$"); Matcher m = p.matcher(line);
if (!m.matches()) {
return false;
}
- 遍历模式
name=value
Pattern p = Pattern.compile("(\\w+)=(\\w+);"); Matcher m = p.matcher(line);
while (m.find()) {
map.put(m.group(1), m.group(2));
}
有没有办法用一个正则表达式来做到这一点?
回答:
您可以通过以下方式验证和迭代一个正则表达式的匹配:
name1=x;;name2=y;
通过\G
在正则表达式的开头放置a来确保匹配之间没有不匹配的字符(例如),这意味着“上一个匹配的结束”。通过将字符串的长度与进行比较,以检查是否在最后一次匹配中到达了字符串的末尾,该字符串的长度
Matcher.end()
返回了最后一个匹配后的偏移量。
就像是:
String line = "name1=gil;name2=orit;"; Pattern p = Pattern.compile("\\G(\\w+)=(\\w+);");
Matcher m = p.matcher(line);
int lastMatchPos = 0;
while (m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
lastMatchPos = m.end();
}
if (lastMatchPos != line.length())
System.out.println("Invalid string!");
现场演示。
某些语言可能允许您直接从迭代各个匹配项 ^((\\w+)=(\\w+);)*$
,但我不相信您可以使用Java来做到这一点。
以上是 如何遍历正则表达式 的全部内容, 来源链接: utcz.com/qa/411692.html