Java 使用正向查找的意外正则表达式行为
我写了一个正则表达式来匹配一个数字序列,后面是一个点,然后是另一个数字序列,总长度,包括点,整个序列应该是13。为此,我编写的正则表达式是:Java 使用正向查找的意外正则表达式行为,java,regex,Java,Regex,我写了一个正则表达式来匹配一个数字序列,后面是一个点,然后是另一个数字序列,总长度,包括点,整个序列应该是13。为此,我编写的正则表达式是:(\d{6,12})\(\d{0,6})(?)匹配,但我希望它不匹配 1234567.12345>匹配 下面是我用来测试的Java代码: 导入java.util.regex.Pattern public class App { public static void main(String[] args) { Pattern matc
(\d{6,12})\(\d{0,6})(?)匹配,但我希望它不匹配
1234567.12345
>匹配
下面是我用来测试的Java代码:
导入java.util.regex.Pattern
public class App {
public static void main(String[] args) {
Pattern matcher = Pattern.compile("(\\d{6,12})\\.(\\d{0,6})(?<=.{13})");
System.out.println(matcher.matcher("1234567.123456").matches());
System.out.println(matcher.matcher("1234567.12345").matches());
}
}
您需要将lookbehind断言锚定到字符串的开头,否则它将匹配一个子字符串:
Pattern matcher = Pattern.compile("(\\d{6,12})\\.(\\d{0,6})(?<=^.{13})");
您需要将lookbehind断言锚定到字符串的开头,否则它将匹配一个子字符串:
Pattern matcher = Pattern.compile("(\\d{6,12})\\.(\\d{0,6})(?<=^.{13})");
您需要在字符串的开头使用锚点进行匹配:
"(\\d{6,12})\\.(\\d{0,6})(?<=^.{13})"
“(\\d{6,12})\\。(\\d{0,6})(?您需要使用锚点在字符串开头匹配:
"(\\d{6,12})\\.(\\d{0,6})(?<=^.{13})"
“(\\d{6,12})\\。(\\d{0,6})(?您可能需要在查找表达式中添加锚(^
):
(?<=^.{13})
(?您可能需要将锚(^
)添加到查找表达式中:
(?<=^.{13})
(?