正则表达式-匹配标点符号、数字及分隔符

string testStr = "你好,测试。";
Regex reg = new Regex(@"\p{P}");
testStr = reg.Replace(testStr, "");

Unicode 编码并不只是为某个字符简单定义了一个编码,而且还将其进行了归类。 

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

大写 P 表示 Unicode 字符集七个字符属性之一:标点字符。 

其他六个是 

L:字母; 
M:标记符号(一般不会单独出现); 
Z:分隔符(比如空格、换行等); 
S:符号(比如数学符号、货币符号等); 
N:数字(比如阿拉伯数字、罗马数字等); 
C:其他字符 

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

Java 中用于 Unicode 的正则表达式数据都是由 Unicode 组织提供的。 

Unicode 正则表达式标准(可以找到所有的子属性) 
http://www.unicode.org/reports/tr18/ 

各 Unicode 字符属性的定义,可以用一看看某个字符具有什么属性。 
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt 

最近因为在处理一些特殊的文本内容,需要对文本内容进行过滤,因此想到了是用正则表达式,尤其是需要过滤其中的标点符号、数字符号还有分隔符之类的。原本想用枚举之类的,把所有的这些字符都一一列出来,但是从找的资料来说符号有很多,既有中文的又有英文的。

英文标点符号比较多,如,(逗号)、。(点号)、?(问号)、:(冒号)、;(分号)、‘’(单引号)、!(感叹号)、“”(双引号)、—(连接号)、——(破折号)、……(省略号)、()(小括号)、【】(中括号)、{}(大括号)、(顿号)、《》书名号等。以下正则表达式能够验证英文标点符号。

参考:http://blog.sina.com.cn/s/blog_6faf711d0101eeso.html

因此最终选择 Unicode 集合来解决,既快捷又方便

content.replaceAll("[\\p{P}|\\p{Z}}|\\p{N}}|\\p{S}]", "")

Android Chrome WebView insertHTML

最近在处理安卓和 iOS 笔记同步这块,使用的基础框架是 webview js 可动态插入内容的方法,在调试的时候发现有一些比较特殊情况导致其中一个平台能够正常加载,但是另外一个平台不能正常加载的情况。

一个是之前遇到的转译字符的问题,另外一个就是当内容里面有单引号【’】,例如文本中有 didn’t 包含有单引号的数据内容。

  • 如果这个内容已经在网页的源码中,webview 显示会正常。
  • 如果这个内容还没有在网页的源码中,需要使用 js 的 insertHTML 方法,而且是通过 Android 的 webview 调用 js 的方法来动态插入包含有单引号内容的数据,这个时候webview 显示会不正常,需要进行对单引号进行 encode 操作。

不仅仅是 Android webview 通过 js 外部动态插入包含有单引号的方法,MAC chrome 浏览器也会出现同样的问题,不过 MAC chrome 处理方式更加简洁,直接在单引号前面添加反斜杠【\】就行了。