我刚刚使用Java进入正则表达式,我正在阅读一本书和Java文档 - 我无法理解为什么 - 考虑到以下程序 - "[\\s*]"
不等同于{{1当用作分隔符时。似乎"\\s*"
相当于"[\\s*]"
,有人可以逻辑地告诉我为什么会这样吗?
"\\s+"
对我来说有意义的输出是每个非空白字符作为单独的标记。当分隔符更改为import java.util.Scanner;
import java.util.regex.Pattern;
public class ScanString {
public static void main(String[] args) {
String str = "Smith , where Jones had had 'had', had had 'had had'.";
String regex = "had";
System.out.println("String is:\n" + str + "\nToken sought is " + regex);
Pattern had = Pattern.compile(regex);
Scanner strScan = new Scanner(str);
strScan.useDelimiter("\\s*");
int hadCount = 0;
while(strScan.hasNext()) {
if(strScan.hasNext(had)) {
++hadCount;
System.out.println("Token found!: " + strScan.next(had));
} else {
System.out.println("Token is : " + strScan.next());
}
}
System.out.println("Count is: " + hadCount);
}
}
或"\\s+"
时,输出为:
"[\\s*]"
答案 0 :(得分:4)
括号[]
包含一个字符类。在他们内部,关于特殊字符的规则是不同的。唯一的特殊字符是“结束括号(]
),反斜杠(\
),插入符号(^
)和连字符(-
)。” (取自this page)
因此,在这种情况下,[\\s*]
表示“空格或*
”。
当您处理正则表达式时,您可以使用RegexPlanet等网站(以测试您的代码)或Regexper(以图形方式显示正则表达式)。
答案 1 :(得分:1)
[]
是characters class。请看一下这些示例:[abc]
表示a|b|c
。如果您创建类似[a*]
的内容,则表示a|\\*
(a
或*
字符。)