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]