当前位置: 首页 > 知识库问答 >
问题:

与下一个结尾匹配的下一个()的 Java 正则表达式

尉迟兴修
2023-03-14

假设我从一个输入文件构造了一个新的扫描器

Scanner aScanner = new Scanner(new FileReader("file.txt"));

file.txt有多条这样的线

blah blah blah blah
blah blah blah

我想检查扫描仪是否具有与我的模式匹配的下一个值:

 aScanner.hasNext("blah");

这很好。但是,当我尝试使用行尾字符$时:

 aScanner.hasNext("blah$");

它失败了。它甚至在我标记多行时失败(?m)。然后我意识到$匹配字符串的结尾,或者输入的结尾,这两种情况都不存在(除了在最后)。考虑到这一点,我该如何匹配下一个输入的结尾呢?

共有2个答案

龚铭
2023-03-14

hasNext("blah$")只能在下一个标记是字符串“blah”后跟文件末尾(或(? m)的行尾时匹配。

这可能具有指导意义:

public static void main(String[] args) {
    Scanner s = new Scanner(new StringReader("blah blah\nblah blah"));
    for (int i = 0; i < 4; i++) {
        System.out.println(s.hasNext("blah"));
        System.out.println(s.hasNext("blah$"));
        System.out.println(s.hasNext("(?m)blah$"));
        s.next();
    }
}

那里有四个废话。第一个只有hasNext(“blah”)匹配。第二个与它以及hasNext(“(?m)blah$”)匹配,因为它位于一行的末尾。第三个同样只有hasNext(“blah”)匹配。第四个匹配所有条件,因为它位于行的末尾和文件的末尾。

黄信厚
2023-03-14

传递给hasNext()的参数是分隔符的模式,然后在调用next()时使用它。

尝试使用后向视图:

aScanner.hasNext("(?<=blah)\\s+");

这意味着使用空格作为分隔符,但前提是前面加上“blah”,尽管这将消耗所有内容,最多为“blash”,并根据需要跳过其他字符。

 类似资料:
  • 问题内容: 如何匹配“ Hello world”或“ Hello World”形式的句子。该句子可能包含“-/数字0-9”。任何信息对我都会非常有帮助。谢谢。 问题答案: 这将做得很好。我对句子的定义:句子以非空格开头,以句点,感叹号或问号(或字符串结尾)结尾。标点符号后可能会有一个结束语。 这是输出: 正确地匹配所有这些(最后一个句子没有结尾标点符号),看起来似乎并不那么容易!

  • 我的输入只能有两个值或。我可以使用什么正则表达式来确保这两个单词中的任何一个都已提交?

  • 我需要使用通配符类型搜索筛选一组字符串,如下所示: 寻找应该匹配你好,但不是Helo 查找应该匹配"pant"和"想要"但不匹配"ant" 寻找应该匹配"吉普赛人"和"典型" 代表一个或多个字符。我不介意手写或基于正则表达式的搜索。有什么想法吗?典型的。NET方法的通配符匹配0或更多,但我需要1个或更多字符。我该怎么做?

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 我试图使用正则表达式来检查字符串中的第一个和最后一个字符是否是a-z之间的字母字符。 我知道这与第一个字符匹配: 但是我如何检查最后一个字符呢? 这: 不起作用。我怀疑这两个条款之间应该有什么区别,但我不知道是什么!

  • 我试图创建一个regex来捕获if cause的最后一个条目。例如,我有如下内容: 我只想在我尝试过类似的方法,但似乎不起作用