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

如何使用正则表达式有效地向后搜索?

胥良平
2023-03-14
问题内容

我正在使用正则表达式在字符串数组中向前搜索,如下所示:

for (int j = line; j < lines.length; j++) {  
    if (lines[j] == null || lines[j].isEmpty()) {
        continue;
    }
    matcher = pattern.matcher(lines[j]);
    if (matcher.find(offset)) {
        offset = matcher.end();
        line = j;
        System.out.println("found \""+matcher.group()+"\" at line "+line+" ["+matcher.start()+","+offset+"]");
        return true;
    }
    offset = 0;
}
return false;

请注意,在上述实现中,我保存了lineoffset以便进行连续搜索。

无论如何,现在我想从该[line,offset] 向后搜索

我的问题:有没有办法使用正则表达式有效地向后搜索?如果没有,那有什么替代方法?

澄清: 通过 向后 我的意思是找到以前的比赛。
例如,假设我在搜索“ dana”

"dana nama? dana kama! lama dana kama?"

并获得第二名。如果我再做matcher.find()一次,我将 向前 搜索并获得第三名。但是我想 向后 搜索并到达第一局。
上面的代码应输出如下内容:

found "dana" at line 0 [0,3] // fwd
found "dana" at line 0 [11,14] // fwd
found "dana" at line 0 [0,3] // bwd

问题答案:

Java的正则表达式引擎无法向后搜索。实际上,我所知道的唯一可以做到这一点的正则表达式引擎就是.NET。

而不是向后搜索,而是循环遍历所有匹配项(向前搜索)。如果比赛在您想要的位置之前,请记住它。如果匹配项位于所需位置之后,请退出循环。用伪代码(我的Java有点生锈):

storedmatch = ""
while matcher.find {
  if matcher.end < offset {
    storedmatch = matcher.group()
  } else {
    return storedmatch
  }
}


 类似资料:
  • 下面是我正在使用的正则表达式的最新版本,它抛出了错误“Invalid regular expression” XSD:正则表达式在位置4验证失败:当前选项设置不支持此表达式。 我在xsd文件中得到了这个异常,我正在message broker(IIB)中开发这个xsd。有谁能帮我解决这个问题吗?

  • 问题内容: 我需要找到与特定正则表达式匹配的所有软件包: 基本上,包的名字应该与启动,并有后话。例如,以下软件包应匹配: 我可以做,但是有很多我不感兴趣的软件包。 是否提供通过正则表达式查找软件包的方法?或者,我应该只是通过管道传递结果来过滤掉无关的包? 此外,可能是一个的“交集” ,并有助于太。 问题答案: alecxe,我相信这是您要寻找的一线客。 如下面评论中铬酸盐所建议的那样,您可以根据需

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

  • 行动时刻 - 使用正则表达式 Unlang允许在条件检查中进行正则表达式计算。这些通常是Posix正则表达式。运算符=〜和!〜与正则表达式相关联。为了简单的概念证明,我们将修改上一个练习: 1.编辑FreeRADIUS配置目录下的sites-available / default虚拟服务器,并在该部分顶部的post-auth部分中添加以下内容: if(request:Framed-Protocol

  • 本文向大家介绍简单高效有用的正则表达式,包括了简单高效有用的正则表达式的使用技巧和注意事项,需要的朋友参考一下 什么是正则表达式? 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。 一个正则表达式是一种从左到右匹配主体字符串的模式。 “Regular expression”这个词比较拗口,我们常使用缩写的术语“regex”或“regexp”。正则表达式可以

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