Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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,我使用下面的正则表达式模式来拆分字符串。我不明白这是怎么匹配的,分裂是怎么发生的。我对正则表达式及其工作原理有基本的了解 public class URLmatching { private static final Pattern SPLIT_PATTERN = Pattern.compile("(?<!(^|[A-Z0-9]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])"); public void print() throws URISy

我使用下面的正则表达式模式来拆分字符串。我不明白这是怎么匹配的,分裂是怎么发生的。我对正则表达式及其工作原理有基本的了解

public class URLmatching {

    private static final Pattern SPLIT_PATTERN = Pattern.compile("(?<!(^|[A-Z0-9]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])");


    public void print() throws URISyntaxException{

        System.out.println(this.getClass().getSimpleName());
        final String[] string = SPLIT_PATTERN.split(getClass().getSimpleName());
        System.out.println(Arrays.toString(string));
    }

    public static void main(String[] args) throws URISyntaxException{

URLmatching u = new URLmatching();
        u.print();
    }
}

此表达式既使用负向后看(
?),也使用正向前看(
?=

反向查找检查偏执中的表达式是否与当前位置之前的表达式匹配。因此,在第一个示例中,
(?它检查前一个位置不是字符串的开头或
[A-Z0-9]
中的任何一个

前瞻检查表达式是否在当前位置之后立即匹配

因此,如果两个条件中的一个匹配,则此表达式将拆分:

  • (?-如果前一个字符不是字符串(
    ^
    )或
    A-Z0-9
    的开头,则该字符将匹配,下一个字符是
    A-Z
    。换句话说,它在此处的任何位置都不匹配。
    它将匹配的示例是
    UrlMatching
    ,其中它将在
    l
    M
    之间匹配

  • (?-如果前一个字符不是字符串的开头,并且后两个字符是大写字母(
    A-Z
    ),后跟小写字母(
    A-Z
    ),则此项匹配。这仅在大写字母
    L
    之前的一个位置匹配,从而提供您观察到的输出


  • 你能给出一个1匹配的例子吗?请解释
    (?在1中应该做什么。在2中再次)你能解释这做什么吗
    (?。如果你能提供一个关于2如何做的分步分解,即
    (?,这将是非常有用的。谢谢。我把答案扩展了一点,希望它现在能回答你所有的问题。我尝试了这个
    (?)在这两个字符串上:ABC和ABC,都是show match。我不明白怎么做。
    URLmatching
    [UR, Lmatching]