当前位置: 首页 > 面试题库 >

如何遍历正则表达式

姬天逸
2023-03-14
问题内容

假设我有以下字符串:

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来做到这一点。



 类似资料:
  • 问题内容: 说我的数据看起来像这样: 我可以创建一个正则表达式 要将名称,年龄和id匹配到第1组中,将peter,40、99匹配到第2组中。但是,我要迭代甚至选择地遍历这些组。例如, 如果group1值是id,我想进行其他处理。所以算法就像 我想做的第二件事就是跳转到匹配的group1的第三个实例,并获取键“ id”,而不是进行迭代。 问题答案: 使用FindAllStringSubmatch查找

  • 如何简化这个正则呢? 或者是否有其他实现方式(正则)?

  • 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描

  • 如何在不包含连续子字符串baa的字母表{a,b,c}上表达正则表达式?

  • (?:x) (x) 这两个好像可以平价替换的吧。有什么特殊应用吗?

  • 问题内容: 我目前正在将Web应用程序代码从PHP移植到JS。 我对此正则表达式有疑问。从PHP 这样使用 如何将其转换为在JS上工作? 先感谢您 问题答案: 没什么特别的。PHP regex语法与JavaScript中的语法非常相似: 您可以从 MDN的 本手册中找到有关JavaScript 中正 则表达式的更多信息:https : //developer.mozilla.org/en- US/