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} 从这个位置开始
您可以使用积极的后视 (?<=
:
那将匹配:
(?<= # Positive lookbehind which asserts that what is before is
^ # Beginning of the string
.. # Match 2 times any character
) # Close lookbehind
a{3} # Match aaa
这可行:
(?<=.)\^a{3}
(?= # lookbehind
. # any character
) # close
\^a{3} # your pattern
您可以将 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-
我试图在字符串中找到 ^a{3} 模式,但不是从头开始。从位置 2
例如:
Pattern pattern = Pattern.compile("^a{3}");
Matcher m = pattern.matcher("xxaaa");
System.out.println(m.find(2));
似乎 ^ 表示字符串的开始(不是从位置 2 开始的字符串)
但是如何从位置 2 找到模式并确保 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
这可行:
(?<=.)\^a{3}
(?= # lookbehind
. # any character
) # close
\^a{3} # your pattern
您可以将 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-