我有一个想要匹配的 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/