\s
能否匹配三种空格
在众多正则表达式的教程中,对于\s
的解释都是匹配空格。但在对于java中的多种空格,\s
不能对他们全部进行匹配。
- 半角空格:“ ”.
- Unicode编码为:\u0020
- 可以通过正则表达式中的
\s
进行匹配
- 全角空格:“ ”
- Unicode编码为:\u3000
- 不能通过正则表达式中的
\s
进行匹配
- 不换行空格(连续空格)
- Unicode编码为:\u00A0,主要用在office中。
- 不能通过正则表达式中的
\s
进行匹配
文末附上测试所用代码。
匹配三种空格,我的简陋解决方案
在\s
匹配空格的位置,改用[\u3000|\u0020|\u00A0]
。其中,[]
:代表一个字符组 匹配包含括号内元素的字符
实验代码如下:
public static void testSpace(){
String regexOriginal = "空格\\s+匹配";
String regexUpdate = "空格[\\u0020|\\u3000|\\u00A0]+匹配";
String str0020 = "空格\u0020匹配";
String str3000 = "空格\u3000匹配";
String str00A0 = "空格\u00A0匹配";
Boolean b0020 = false;
Boolean b3000 = false;
Boolean b00A0 = false;
Pattern pattern = Pattern.compile(regexOriginal);
Matcher matcher0020 = pattern.matcher(str0020);
Matcher matcher3000 = pattern.matcher(str3000);
Matcher matcher00A0 = pattern.matcher(str00A0);
b0020 = matcher0020.find();
b3000 = matcher3000.find();
b00A0 = matcher00A0.find();
System.out.println("\\s可以匹配到\\u0020吗?(半角)" + b0020.toString());
System.out.println("\\s可以匹配到\\u3000吗?(全角)" + b3000.toString());
System.out.println("\\s可以匹配到\\u00A0吗?(连续空格)" + b00A0.toString());
}