与java.util.Scanner连续锚定匹配

时间:2016-04-02 21:44:13

标签: java regex

我想实现以下语义:

while (EOF is not reached) {
    if (scanner.findWithinHorizon("^" + pattern1, 0)) {
        // do something
    } else if (scanner.findWithinHorizon("^" + pattern2, 0)) {
        // do something else
    } else {
        // report error
    }
}

好。这里的问题是Scanner与新的"流的头部不匹配"用锚定的正则表达式。例如,我们说我们有一台扫描仪new Scanner("11")。我们第一次通过调用^1将其与正则表达式scanner.findWithinHorizon("^1", 0)匹配将返回匹配的字符串"1"。但是,第二个调用将返回null,而不是我想要的行为,这将再次返回"1",因为在使用第一个'1'之后,流的新头仍然是'1' 1}}。

有什么方法可以在Java中获得我想要的效果吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

说我们有'123'。如果我匹配'2'则匹配。但是我想要它   只有在我之前匹配'1'时才匹配   “

你需要的是一个外观操作员,这允许你根据前一个角色匹配一个角色。 (?=) - 积极前瞻 (?< =) - 积极的背后隐藏

如果你想根据前面的内容进行匹配,你可以使用前瞻。

以下是Implementing look behind in java

的答案

看看正面(?< =)

查找表达式A,其中表达式B在

之前