模式麻烦

时间:2011-04-15 11:08:48

标签: 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

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

1 个答案:

答案 0 :(得分:1)

我假设您只想匹配“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*)";