Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正向查找的意外正则表达式行为_Java_Regex - Fatal编程技术网

Java 使用正向查找的意外正则表达式行为

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

我写了一个正则表达式来匹配一个数字序列,后面是一个点,然后是另一个数字序列,总长度,包括点,整个序列应该是13。为此,我编写的正则表达式是:
(\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})
    
    (?