白色 space 匹配正则表达式
white space matching regular expressions
我有以下两种模式来匹配带有可能前导空格的 html 标签名称。 [ ]*
在命名组 <doubletag>
内的第一个模式不起作用,但 [ ]*
紧跟在标记符号 "<"
之后的第二个模式有效。不知道为什么第一个不行
String s = "< pre href = "dajflka" >ld fjalj09u293 ^% </pre>";
Pattern ptr = Pattern.compile("(<(?<doubletag>[ ]*[a-z]+)([ \d\s\w\W[^>]])*>)(.*)(</\k<doubletag>[ ]*>)");
Pattern ptr = Pattern.compile("(<[ ]*(?<doubletag>[a-z]+)([ \d\s\w\W[^>]])*>)(.*)(</\k<doubletag>[ ]*>)");
Matcher match = ptr.matcher(s);
if(match.find()){
System.out.println("Found");
}
\s
是白色的 space ,如果那是你想要的,把 [\s]*
.
实际上,第一个模式可以找到前导空格。如果您只尝试第一个模式的第一组:
String s = "< pre href = \" dajflka \" >";
Pattern pattern = Pattern.compile("<(?<doubletag>[ ]*[a-z]+)([ \d\s\w\W[^>]])*>");
Matcher match = pattern.matcher(s);
if (match.find()) {
System.out.println("Found");
System.out.println(match.group("doubletag"));
}
你会得到doubletag
:
" pre"
问题是,在</pre>
中,它没有前缀空格,所以找不到组(</\k<doubletag>[ ]*>)
。这就是第一个模式无法匹配整个字符串的原因。
我有以下两种模式来匹配带有可能前导空格的 html 标签名称。 [ ]*
在命名组 <doubletag>
内的第一个模式不起作用,但 [ ]*
紧跟在标记符号 "<"
之后的第二个模式有效。不知道为什么第一个不行
String s = "< pre href = "dajflka" >ld fjalj09u293 ^% </pre>";
Pattern ptr = Pattern.compile("(<(?<doubletag>[ ]*[a-z]+)([ \d\s\w\W[^>]])*>)(.*)(</\k<doubletag>[ ]*>)");
Pattern ptr = Pattern.compile("(<[ ]*(?<doubletag>[a-z]+)([ \d\s\w\W[^>]])*>)(.*)(</\k<doubletag>[ ]*>)");
Matcher match = ptr.matcher(s);
if(match.find()){
System.out.println("Found");
}
\s
是白色的 space ,如果那是你想要的,把 [\s]*
.
实际上,第一个模式可以找到前导空格。如果您只尝试第一个模式的第一组:
String s = "< pre href = \" dajflka \" >";
Pattern pattern = Pattern.compile("<(?<doubletag>[ ]*[a-z]+)([ \d\s\w\W[^>]])*>");
Matcher match = pattern.matcher(s);
if (match.find()) {
System.out.println("Found");
System.out.println(match.group("doubletag"));
}
你会得到doubletag
:
" pre"
问题是,在</pre>
中,它没有前缀空格,所以找不到组(</\k<doubletag>[ ]*>)
。这就是第一个模式无法匹配整个字符串的原因。