Java 带有 ^ 符号的正则表达式:从位置查找

Java regex with ^ symbol: find from position

我试图在字符串中找到 ^a{3} 模式,但不是从头开始。从位置 2

例如:

Pattern pattern = Pattern.compile("^a{3}");
Matcher m = pattern.matcher("xxaaa");
System.out.println(m.find(2));

似乎 ^ 表示字符串的开始(不是从位置 2 开始的字符串)

但是如何从位置 2 找到模式并确保 a{3} 从这个位置开始

您可以使用积极的后视 (?<=:

(?<=^..)a{3}

那将匹配:

(?<= # Positive lookbehind which asserts that what is before is
  ^  # Beginning of the string
  .. # Match 2 times any character
)    # Close lookbehind
a{3} # Match aaa

Output Java test

这可行:

(?<=.)\^a{3}

(?=  # lookbehind
.    # any character
)    # close
\^a{3} # your pattern

https://regex101.com/r/jTLwUp/1

您可以将 Matcher 中的区域更改为从 2 开始,而不会弄乱原始的正则表达式。见下文:

Pattern pattern = Pattern.compile("^a{3}");
Matcher m = pattern.matcher("xxaaa");
m.region(2, m.regionEnd()); // <---- region start is now 2

System.out.println(m.find());
System.out.println(m.lookingAt());

参见:https://docs.oracle.com/javase/9/docs/api/java/util/regex/Matcher.html#region-int-int-