我想要匹配的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
我已经尝试修改模式以使用不情愿和占有量词,但似乎都没有产生我期望的结果。我在这里做错了什么?
答案 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*)";