Unicode 字符集七个字符属性

前端时间在学习别人敏感词过滤的时候, 发现了一段很有意思的代码,网上搜了下,有介绍, 但不多,在次整理下, 增加下网友搜索命中度, 也方便自己后面查找。

代码是关于标点符号的正则匹配:

	private static boolean isPunctuationChar(String c) {
		String regex = "[\\pP\\pZ\\pS\\pM\\pC]";
		Pattern p = Pattern.compile(regex, 2);
		Matcher m = p.matcher(c);
		return m.find();
	}

注意上面的regex 很神奇是吧!当时我也看的咋呼了(英语不太好- -!)!

下面大致讲下这是个咋回事!这就要说到Unicode
Unicode 编码并不只是为某个字符简单定义了一个编码,而且还将其进行了归类。

/pP 其中的小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。

大写 P 表示 Unicode 字符集七个字符属性之一:标点字符。
其他六个是
L:字母;
M:标记符号(一般不会单独出现);
Z:分隔符(比如空格、换行等);
S:符号(比如数学符号、货币符号等);
N:数字(比如阿拉伯数字、罗马数字等);
C:其他字符

上面这七个是属性,七个属性下还有若干个子属性,用于更进一步地进行细分。

属性归类 子属性 含义
L Lu Uppercase Letter
Ll Lowercase Letter
Lt Titlecase Letter
Lm Modifier Letter
Lo Other Letter
M Mn Non-Spacing Mark
Mc Spacing Combining Mark
Me Enclosing Mark
N Nd Decimal Digit Number
Nl Letter Number
No Other Number
S Sm Math Symbol
Sc Currency Symbol
Sk Modifier Symbol
So Other Symbol
P Pc Connector Punctuation
Pd Dash Punctuation
Ps Open Punctuation
Pe Close Punctuation
Pi Initial Punctuation
Pf Final Punctuation
Po Other Punctuation
Z Zs Space Separator
Zl Line Separator
Zp Paragraph Separator
C Cc Control
Cf Format
Cs Surrogate
Co Private Use
Cn Unassigned

Java 中用于 Unicode 的正则表达式数据都是由 Unicode 组织提供的。上面的含义就不转中文了(头疼), 官方文档找来的, 一般也用不到!
 

你可能感兴趣的:(JAVA,其它,正则表达式,Unicode)