如何遍历正则表达式

假设我有以下字符串:

name1=gil;name2=orit;

我想查找的所有匹配项,name=value并确保整个字符串与模式匹配。

所以我做了以下事情:

  1. 确保整个模式与我想要的匹配。

        Pattern p = Pattern.compile("^((\\w+)=(\\w+);)*$");

Matcher m = p.matcher(line);

if (!m.matches()) {

return false;

}

  1. 遍历模式 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

回到顶部