java - 模式问题

标签 java regex

我有一个想要匹配的 Java 模式。我想将我的初始模式与它第一次出现时的匹配。不过我认为

public static void main(String[] args)
    {
        final String expression = "(\\s*(a{1}\\s*b{1})\\s*)";

        Scanner scanner1 = new Scanner(" ab");
        //should be rejected
        Scanner scanner2 = new Scanner("cab");

        System.out.println(scanner1.findWithinHorizon(expression, 0));
        System.out.println(scanner2.findWithinHorizon(expression, 0));
    }

当我运行上面的代码时,我得到以下输出:

ab
ab

我尝试修改模式以使用不情愿和所有格量词,但似乎都没有产生我期望的结果。我在这里做错了什么?

最佳答案

我假设您只想匹配“ab”而不是“cab”或“c ab”,因此使用此正则表达式从字符串的开头开始:final String expression = "^(\\s*(a{1}\\s*b{1})\\s*)";

如果您还想匹配“c ab”而不是“cab”,请尝试以下操作:final String expression = "((?<!\\w)\\s*(a{1}\\s*b{1})\\s*)";

关于java - 模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5675785/

相关文章:

java - Gammu 同时使用来自 ssh 的两个或多个 java 应用程序发送短信

java - 文件上传流从哪里获取内容?

java - Scout Eclipse 表格页面模板

java - Java War文件在jar文件中引发FileNotFoundException

java - 正则表达式提取由空格分隔的键值对,值中有空格

java - hibernate 当前日期不工作

java - 如何在Java正则表达式中分割这个字符串?

javascript - 用于网站或网址验证的正则表达式

javascript - 4个或更多相同的连续字母

javascript - 如何在开头匹配 0 或 + 后跟 1 到 3 位数字,但不能同时匹配两者?