关于HttpClient的中文参数编码问题

Posted on

关于HttpClient的中文参数编码问题 - 讨论区 - 开源中国社区

当前访客身份:游客 [ 登录 | 加入开源中国 ]

当前位置:讨论区 » 技术分享 » HttpComponents

软件 代码 讨论区 新闻 博客 红薯

关于HttpClient的中文参数编码问题

红薯 发表于 10-5 17:13 3年前, 1回/762阅, 最后回答: 4个月前 讨论区 » 技术分享

开源扑克第二轮预售,截止时间 9 月 30 日 我要购买 今天在使用HttpClient提交中文参数的时候发现服务器不管怎么处理得到的字符串都是乱码,考虑应该是客户端的问题,查阅 HttpClient的文档,提到这么一段:

The standard for URLs ( RFC1738 ) explictly states that URLs may only contain graphic printable characters of the US-ASCII coded character set and is defined in terms of octets. The octets 80-FF hexadecimal are not used in US-ASCII and the octets OO-1F hexadecimal represent control characters; characters in these ranges must be encoded. Characters which cannot be represented by an 8-bit ASCII code, can not be used in an URL as there is no way to reliably encode them (the encoding scheme for URLs is based off of octets). Despite this, some servers do support varying means of encoding double byte characters in URLs, the most common technique seems to be to use UTF-8 encoding and encode each octet separately even if a pair of octets represents one character. This however, is not specified by the standard and is highly prone to error, so it is recommended that URLs be restricted to the 8-bit ASCII range. 因此在提交中文参数的时候必须进行转码: NameValuePair content = new NameValuePair("content",new String(" 你好中国".getBytes(),"8859_1")); 搞定!

标签: HttpComponents HttpClient 补充话题说明»

分享到 **

收藏 **

1 **

举报 **

0 | 0 **

按默认排序 | 显示最新评论 | 回页面顶部 共有1个评论 发表评论»

  • hujiong

hujiong 回答于 2012-05-08 09:25

举报 有帮助(0) | 没帮助(0) | 评论(0) | 引用此评论

非会员用户) ")")") 回评论顶部 | 回页面顶部 有什么技术问题吗? 我要提问

全部(4766)...红薯的其他问题

© 开源中国社区(OsChina.NET) | 关于我们 | 广告联系 | @新浪微博 | 开源中国手机版 | 粤ICP备12009483号-3

httpclient中文乱码问题解决方法

Posted on

httpclient中文乱码问题解决方法

bingxuelian

这里,介绍一种解决抓取后网页内容显示为乱码的办法。 前几天,在抓取某网站的信息时(http://www.99sj.com/Price/Price/Default.aspx),第一次碰到了这种应用下的乱码问题。于是上网查了一下,提供的解决办法大致有两种: 1>  private static final String CONTENTCHARSET = "GBK"; httpClient.getParams().setContentCharset("UTF-8"); or httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, CONTENT_CHARSET); 2>  private static final String CONTENTTYPE = " text/html; charset=GBK"; getMethod.setRequestHeader("Content-Type", CONTENTTYPE); 测试了,没有任何效果(换成UTF-8也不行)。也用了String result = new String(pageSrc.getBytes("UTF-8"),"GBK"),依然无效。 在焦头烂额时想到了以前在学校时经常用的一句话:找问题要会追根溯源。仔细想想,字符串里面的文本内容也是通过文件流获取的,既然转换字符串字符编码不起作用,那可以设置文件流的默认编码吗?查了jdk,是可行的。 private static final String CHARSET = "UTF-8"; InputStream ins = getMethod.getResponseBodyAsStream(); //按指定的字符集构建文件流 BufferedReader br = new BufferedReader(new InputStreamReader(ins,CHARSET)); StringBuffer sbf = new StringBuffer(); String line = null; while ((line = br.readLine()) != null) { sbf.append(line); } /// 回收资源 // br.close(); getMethod.releaseConnection(); /// 页面源文件 // pageSource = sbf.toString(); 问题解决,^^。这里的CHARSET要根据实际情况设置 /#搜索引擎--爬虫技术

注意设置httpclient连接数

Posted on

注意设置httpclient连接数

黄刚

在使用Httpclient的过程中,线上的酒店出现过一个问题,就是当访问量增大的时候,会发现本地的连接等待时间急剧增加,例如从400ms增加到 78000ms,之前一直以为是航信系统问题,后面经过检查才发现,原来是本地httpclient设置时,最大连接数采用了默认设置的原因,而默认的最大连接数只有2个,所以当有大量连接需要建立时,大多数连接只有等待。后面将连接数设置修改成32个之后,这个响应时间就基本上很少出现很大的时候。

  HttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
    HttpConnectionManagerParams params = httpConnectionManager.getParams();
    params.setConnectionTimeout(5000);
    params.setSoTimeout(20000);
    params.setDefaultMaxConnectionsPerHost(32);//very important!!
    params.setMaxTotalConnections(256);//very important!!
    this.client = new HttpClient(httpConnectionManager);
    // 设置编码
    this.client.getParams().setContentCharset(CharsetHelper.GBK);
    this.client.getParams().setHttpElementCharset(CharsetHelper.GBK);

我们一般很容易注意到设置超时时间,例如这里的红色部分,但是极有可能忘记设置每个主机的最大连接数(绿色),因此大家注意一下,本来是最简单的,但也最容易被忽略。

发表于 @ 2009年09月03日 18:39:00

匹配中文字符的正则表达式: [u4e00

Posted on

匹配中文字符的正则表达式: [u4e00-u9fa5]

PHP圈子

登录站点

用户名

密码

记住我

« 返回上一页

阿米的日志

阿米的主页 » TA的所有日志 » 查看日志

匹配中文字符的正则表达式: [u4e00-u9fa5]

已有 2075 次阅读 2008-12-19 15:28 标签: 正则表达式 字符 中文

评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:ns/r 评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(S/?)[^>]/>./?|<./? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 匹配首尾空白字符的正则表达式:^s/|s/$ 评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式 匹配Email地址的正则表达式:w+([-+.]w+)/@w+([-.]w+)/.w+([-.]w+)/ 评注:表单验证时很实用 匹配网址URL的正则表达式:[a-zA-z]+://[^s]/ 评注:网上流传的版本功能很有限,上面这个基本可以满足需求 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 评注:表单验证时很实用 匹配国内电话号码:d{3}-d{8}|d{4}-d{7} 评注:匹配形式如 0511-4405222 或 021-87888822 匹配腾讯QQ号:[1-9][0-9]{4,} 评注:腾讯QQ号从10000开始 匹配中国邮政编码:[1-9]d{5}(?!d) 评注:中国邮政编码为6位数字 匹配身份证:d{15}|d{18} 评注:中国的身份证为15位或18位 匹配ip地址:d+.d+.d+.d+ 评注:提取ip地址时有用 匹配特定数字: ^[1-9]d/$    //匹配正整数 ^-[1-9]d/$   //匹配负整数 ^-?[1-9]d/$   //匹配整数 ^[1-9]d/|0$  //匹配非负整数(正整数 + 0) ^-[1-9]d/|0$   //匹配非正整数(负整数 + 0) ^[1-9]d/.d/|0.d/[1-9]d/$   //匹配正浮点数 ^-([1-9]d/.d/|0.d/[1-9]d/)$  //匹配负浮点数 ^-?([1-9]d/.d/|0.d/[1-9]d/|0?.0+|0)$  //匹配浮点数 ^[1-9]d/.d/|0.d/[1-9]d/|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0) ^(-([1-9]d/.d/|0.d/[1-9]d/))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0) 评注:处理大量数据时有用,具体应用时注意修正 匹配特定字符串: ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串 ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串 ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串 ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串 ^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串 在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下: 只能输入数字:“^[0-9]/$” 只能输入n位的数字:“^d{n}$” 只能输入至少n位数字:“^d{n,}$” 只能输入m-n位的数字:“^d{m,n}$” 只能输入零和非零开头的数字:“^(0|[1-9][0-9]/)$” 只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$” 只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$” 只能输入非零的正整数:“^+?[1-9][0-9]/$” 只能输入非零的负整数:“^-[1-9][0-9]/$” 只能输入长度为3的字符:“^.{3}$” 只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$” 只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$” 只能输入由26个小写英文字母组成的字符串:“^[a-z]+$” 只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$” 只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$” 验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为:以字母开头,长度在6-18之间, 只能包含字符、数字和下划线。 验证是否含有^%&',;=?$"等字符:“[^%&',;=?$x22]+” 只能输入汉字:“^[u4e00-u9fa5],{0,}$” 验证Email地址:“^w+[-+.]w+)/@w+([-.]w+)/.w+([-.]w+)/$” 验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]/)?$” 验证电话号码:“^((d{3,4})|d{3,4}-)?d{7,8}$” 正确格式为:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”, “XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。 验证身份证号(15位或18位数字):“^d{15}|d{}18$” 验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12” 验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$” 正确格式为:“01”“09”和“1”“31”。 匹配中文字符的正则表达式: [u4e00-u9fa5] 匹配双字节字符(包括汉字在内):[^x00-xff] 匹配空行的正则表达式:n[s| ]/r 匹配HTML标记的正则表达式:/<(./)>./|<(./) />/ 匹配首尾空格的正则表达式:(^s/)|(s/$) 匹配Email地址的正则表达式:w+([-+.]w+)/@w+([-.]w+)/.w+([-.]w+)/ 匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]/)? (1)应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;} (2)应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现 String.prototype.trim = function() { return this.replace(/(^s/)|(s/$)/g, ""); } (3)应用:利用正则表达式分解和转换IP地址 function IP2V(ip) //IP地址转换成对应数值 { re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式 if(re.test(ip)) { return RegExp.$1/Math.pow(255,3))+RegExp.$2/Math.pow(255,2))+RegExp.$3/255+RegExp.$4/1 } else { throw new Error("Not a valid IP address!") } } (4)应用:从URL地址中提取文件名的javascript程序 s="http://www.9499.net/page1.htm"; s=s.replace(/(.//){0,}([^.]+).//ig,"$2") ;//Page1.htm (5)应用:利用正则表达式限制网页表单里的文本框输入内容 用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,'))" 用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,'))" 用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^d]/g,') "onbeforepaste= "clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,'))" 用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,' 分享 举报

[1

]()
路过
鸡蛋 鲜花 握手 雷人

发表评论 评论 (1 个评论)

回复 举报wenzhao823 2008-12-22 12:14 我如何才能分享你的日志? 涂鸦板

全部 作者的其他最新日志

热门日志导读

PHP圈子 - 联系我们 - 京ICP备07504665号

Powered by UCenter Home 2.0 © 2001-2010 Comsenz Inc.

正则匹配模式

Posted on

正则匹配模式

正则匹配模式 匹配模式指得是正则表达式引擎将以何种模式匹配字符串。 模式名称 启用,禁用 缺省启用 说明UNIX_LINES (?d)启用,(?-d)禁用 是 启用Unix行模式。 在此模式下,只有 '\n'被认为是行结束符。它会影响., ^, 和 $ 的行为。CASE_INSENSITIVE (?i)启用,(?-i)禁用 否 启用忽略大小写模式。 缺省时,忽略大小写模式只会影响 ASCII字符的匹配。 而Unicode范围的忽略大小写匹配需要通过 UNICODE_CASE 标志与本标志联合使用。 启用此模式会影响匹配性能。COMMENTS (?x)启用,(?-x)禁用 否 允许空格和注释出现在正则表达式中。 在此模式下,空格被忽略,以/#开始的单行注释被忽略。MULTILINE (?m)启用,(?-m)禁用 是 启用多行模式。 In multiline mode the expressions ^ and $ match just after or just before, respectively, a line terminator or the end of the input sequence. By default these expressions only match at the beginning and the end of the entire input sequence.DOTALL (?s)启用,(?-s)禁用 否 让.可以匹配行结束符。 在此模式下,元字符.可以匹配行结束符。缺省不允许如此匹配。UNICODE_CASE (?u)启用,(?-u)禁用 否 Enables Unicode-aware case folding. When this flag is specified then case-insensitive matching, when enabled by theCASE_INSENSITIVE flag, is done in a manner consistent with the Unicode Standard. By default, case-insensitive matching assumes that only characters in the US-ASCII charset are being matched. 启用此模式会影响性能。CANON_EQ (?c)启用,(?-c)禁用 否 Enables canonical equivalence. When this flag is specified then two characters will be considered to match if, and only if, their full canonical decompositions match. The expression "a\u030A", for example, will match the string"?" when this flag is specified. By default, matching does not take canonical equivalence into account. 启用此模式会影响性能。

字符子集  字符子集可以含有别的字符子集,并且可以通过联合操作符(缺省)和交集操作符(&&)实现组合。联合操作符表示某个子集匹配它的子子集所匹配的任意字符。交集操作符表明某个字符子集只匹配它的子子集都匹配的字符。 字符子集所能够有的操作符的优先级如下,从高到低: 转义符\x 成组符 [...] 区间符 a-z 联合符 [a-e][i-u] 交集符 [a-z&&[aeiou]]

注意:在字符子集[]内部的语法根本不同于正则表达式其它部分中的语法。例如,在字符子集内部,正则表达式 . 失去了它原有的含义,而是成了一个匹配.的元字符。 行结束符  行结束符是一个或两个字符序列,用以表明输入字符序列中一行的结束。下面的字符被认为是行结束符: 一个换行符('\n')。 一个回车符加上一个换行符("\r\n")。 一个单独的回车符('\r')。 代表下一行的字符('\u0085')。 行分隔符('\u2028'),Unicode中被定义。 一个分段符('\u2029),Unicode中被定义。

如果 UNIX_LINES 模式被启用,则只有换行符被认为是行结束符。 如果 MULTILINE 模式被启用,。 分组和引用  字符分组以它们的左括号的出现顺序来排序。例如在表达式((A)(B(C))),有四个分组: ((A)(B(C))) (A) (B(C)) (C)

第0组永远表示表达式本身。 分组采用这样的命名方式,是因为,在一次匹配过程中,正则表达式会被匹配多次。以前的匹配子序列有可能在将来被使用;或者在匹配结束时,程序有可能需要重新获得所有匹配的子字符序列。 对于正则表达式中的某个分组而言,永远只保留最后匹配的字符序列。如果对某个分组匹配尝试失败,则会保留上次匹配成功的字符序列。例如,对于正则表达式(a(b)?)+而言,字符序列"aba",将会让分组2匹配的字符序列为"b"。 以(?开始的分组,将不会计入分组数目,也不会被后续匹配所引用。 Unicode支持  本正则表达式匹配引擎的实现遵循了《Unicode技术报告:Unicode正则表达式指南》,实现了该指南的第二层所需的功能,但是在细微处有一些简单语法修改。 Unicode块(Block)和分类(Category)通过\p和\P通配苻表示。\p{prop}匹配含有prop的输入序列,而\P{prop}匹配不含有prop的输入序列。Unicode块通过前缀In表示,如\p{InMongolian}。Unicode分类通过可选的前缀Is表示,因此\p{L}和\p{IsL}都代表Unicode分类 letters。Unicode块和分类都可以在正则表达式子集外部和内部使用。 目前支持的Unicode块和分类是《Unicode标准,第三版》中所指定的块和分类。 Unicode块名称在《Unicode 字符数据库》的第14章被定义,文件名称叫Blocks-3.txt,但是名称中的空格被去掉了。例如"Basic Latin"成了"BasicLatin"。无论是标准化的还是非标准化的分类,都在该标准的第88页的第4-5表中被全部定义。 与Perl 5正则表达式语法对比 [TBD] 正则表达式参考 字符 正则表达式字符串 匹配的字符串X 字符X,包括 CJK ExtB 区汉字\ 反斜杠\0n八进制0n代表的字符(0<=n<=7)\0nn 八进制0nn代表的字符(0<=n<=7)\0mnn 八进制0mnn代表的字符(0<=m<=3,0<=n<=7)\xhh 十六进制 0xhh所代表的字符\uhhhh 十六进制 0xhhhh所代表的字符。注意,目前尚不支持CJK ExtB区汉字。\t 制表符('\u0009')\n 换行('\u000A')\r 回车('\u000D')\a 响铃符('\u0007')\e 取消符Escape('\001B')\cx x所代表的控制字符

逻辑操作符 正则表达式字符串 匹配的字符串XY X后面跟随YX|Y X或者Y(X) X作为分组表达式

向后引用 正则表达式字符串 匹配的字符串\n 第n个匹配的分组

边界元字符 边界字符 匹配的字符串^ 行首$ 行末\b字符边界\B 非字符边界\A 输入流的开始\G 上次匹配的结束处\Z 输入流的结束,或者是最后一个行结束符,参见[url=file:///D:/source/jtextpro/src/dist/jtextpro/docs/regexp.html/#man_line_terminator]行结束符[/url]。\z 输入流的结束

重复指示符 正则表达式字符串 匹配的字符串X? X重复一次,或者不重复X/* X重复0次或多次X+ X重复1次或多次X{n} X重复n次,不多也不少。X{n,} X至少重复n次X{n,m} X至少重复n次,至多重复m次。

注:X{n,m}、?、/*、+方式可以联合使用。 字符子集 正则表达式字符串子集 匹配的字符串 组合方式[abc] 字符a,b或c,包括 CJK ExtB 区汉字 简单子集[^abc] 任意非a,b或c的字符。 排除[a-zA-Z]从a到z,或者A到Z,包含a,z,A,Z。 区间[a-d[m-p]] 从a到d,或者m到p,等于[a-dm-p]。 联合[a-z&&[def]] d,e或者f。 交集[a-z&&[^bc]] 从a到z,除了b和c,等于[ad-z] 扣除[a-z&&[^m-p]] 从a到z,并且不包括从m到p,等于[a-lq-z] 扣除

预定义子集(元字符) 边界字符 匹配的字符串. 任意字符,可能匹配行结束符。\d 数字[0-9]\D非数字[^0-9]\s 空白符[ \t\n\x0B\f\r]\S 非空白符[^\s]\w 单词符,包含有字母和数字[a-zA-Z_0-9]\W 非单词符,不包含有字母和数字。

扩展子集(元字符) 正则表达式字符串 匹配的字符串

扩展中文子集(元字符) 名称 块名称(\p{InXXX}) 简化通配符 标准Unicode块,或者汉字列表任意双字节字符(汉字或全角符号) \p{InQuqnJiao} \E 任意由GBK表示的汉字,不包括GB18030扩展部分, 以及CJK ExtB区的汉字。任意单字节字符 \p{InFQuanJiao} ~E 任意单字节字符。任意全角ASCII字符 \p{InQJAscii} \H 标准HalfwidthandFullwidthForms块任意收录在BIG5码集中的双字节字符 \p{InBig5} \I Big5可编码双字节字符匹配未收录在BIG5码集中的双字节字符\p{InFBig5} ~I 非Big5可编码双字节字符匹配任意汉字(不包括符号) \p{InHanziOrCJKExtB} \X 任意汉字,包括GB18030扩展部分。匹配任意汉字(不包括符号) \p{InHanzi} \M 任意汉字,不包括GB18030扩展部分。匹配非汉字的双字节字符 \p{InFHanzi} ~M 任意非汉字的双字节字符, 包括GB18030扩展部分。地支字符 \p{InDiZhi} \U 子丑寅卯辰巳午未申酉戌亥匹配收录在GB码集中的双字节字符 \p{InGB} \g 收录在GB码集中的双字节字符, 不包括GB18030扩展部分。匹配非收录在GB码集中的双字节字符 \p{InFGB} ~g 未收录在GB码集中的双字节字符, 不包括GB18030扩展部分。匹配收录在GBK码集中的双字节字符 \p{InGBK} \h 收录在GBK码集中的双字节字符, 不包括GB18030扩展部分。匹配非收录在GBK码集中的双字节字符 \p{InFGBK} ~h 未收录在GBK码集中的双字节字符, 不包括GB18030扩展部分。大写希腊字母 \p{InDaXila} \K ΑΒΓΔΕΖΗΘΙΚΛΜΝ ΞΟΠΡΣΤΥΦΧΨΩ日文片假名 \p{InPianJia} \j 标准Katakana块日文平假名 \p{InPingJia} \J 标准Hiragana块小写希腊字母 \p{InXiaoXila} \k αβγδεζηθικλμν ξοπρστυφχψω数学符号 \p{InMathe} \m ±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙ ∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴中文数字 \p{InCnDigit} \i 〇一二三四五六七八九十百千万亿兆吉京大写中文数字 \p{InDaCnDigit} \N 零壹贰叁肆伍陆柒捌玖拾佰仟萬亿兆吉京全角标点符号 \p{InQJBiaoDian} \o 、。·ˉˇ¨〃々—~‖…‘’“”〔〕 〈〉《》「」『』〖〗【】!"'(), -.:;<=>?[]{|}`﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚ ﹛﹜﹝﹞︵︶︹︺︿﹀︽︾﹁﹂﹃﹄ ︻︼︷︸︱︳︴小写俄文字母 \p{InXiaoEWen} \l абвгдеёжзийклмн опрстуфхцчшщъыьэюя大写俄文字母 \p{InDaEWen} \R АБВГДЕЁЖЗИЙКЛМНО ПРСТУФХЦЧШЩЪЫЬЭЮЯ中文序号 \p{InCnSN} \q ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ 再加上Unicode标准EnclosedAlphanumerics块天干字符 \p{InTianGan} \T 甲乙丙丁戊己庚辛壬癸竖排标点符号 \p{InSPBiaoDian} \V ︵︶︹︺︿﹀︽︾﹁﹂﹃﹄︻︼︷︸︱︳︴拼音字符 \p{InPinyin} \y āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑńňɡ GBK -> 0xA8A1- 0xA8C0 只是Unicode标准LatinExtended-A块的一部分。注音字符 \p{InZhuyin} \Y 标准Bopomofo块制表字符 \p{InZhiBiao} \C 标准BoxDrawing块。 经检查发现 textpro 的算法含有部分非标 准Unicode制表符:“∟∣≒≦≧⊿═”。

POSIX字符子集(只适用于ASCII) 正则表达式字符串 匹配的字符串\p{Lower} 小写字母[a-z]\p{Upper} 大写字母[A-Z]\p{ASCII} 所有的ASCII字符[\x00-\x7F]\p{Alpha} 大小写字母[\p{Lower}\p{Upper}]\p{Digit} 数字[0-9]\p{Alnum} 字母数字符,包含大小写字母和数字[\p{Alpha}\p{Digit}]\p{Punct} 标点符号,!"/#$%&'()/*+,-./:;<=>?@[]^_`{|}~之一。\p{Graph} 可显示字符[\p{Alnum}\p{Punct}]\p{Print} 可打印字符[\p{Graph}]\p{Blank} 空格或者制表符[ \t]\p{Cntrl} 控制字符[\x00-\x1F\x7F\p{XDigit} 十六进制数字[0-9a-fA-F]\p{Space} 空白符[ \t\n\x0B\f\r]

Unicode块和分类 块 中文名称(摘自Word XP) 代码区域BasicLatin 基本拉丁语 \u0000-\u007FLatin-1Supplement 拉丁语-1 \u0080-\u00FFLatinExtended-A 拉丁语扩充-A \u0100-\u017FLatinExtended-Bound 拉丁语扩充-B \u0180-\u024FIPAExtensions 国际音标扩充 \u0250-\u02AFSpacingModifierLetters 进格的修饰字符 \u02B0-\u02FFCombiningDiacriticalMarks 组合用发音符 \u0300-\u036FGreek 基本希腊语 \u0370-\u03FFCyrillic 西里尔语 \u0400-\u04FFArmenian \u0530-\u058FHebrew \u0590-\u05FFArabic \u0600-\u06FFSyriac \u0700-\u074FThaana \u0780-\u07BFDevanagari \u0900-\u097FBengali \u0980-\u09FFGurmukhi \u0A00-\u0A7FGujarati \u0A80-\u0AFFOriya \u0B00-\u0B7FTamil \u0B80-\u0BFFTelugu \u0C00-\u0C7FKannada \u0C80-\u0CFFMalayalam \u0D00-\u0D7FSinhala \u0D800-\uDFFThai \u0E00-\u0E7FLao \u0E80-\u0EFFTibetan 藏语 \u0F00-\u0FFFMyanmar \u1000-\u109FGeorgian \u10A0-\u10FFHangulJamo \u1100-\u11FFEthiopic \u1200-\u137FCherokee \u13A0-\u13FFUnifiedCanadianAboriginalSyllabics \u1400-\u167FOgham \u1680-\u169FRunic \u16A0-\u16FFKhmer \u1780-\u17FFMongolian 蒙古语 \u1800-\u18AFLatinExtendedAdditional \u1E00-\u1EFFGreekExtended \u1F00-\u1FFFGeneralPunctuation 广义标点 \u2000-\u206FSuperscriptsandSubscripts \u2070-\u209FCurrencySymbols 货币符号 \u20A0-\u20CFCombiningMarksforSymbols \u20D0-\u20FFLetterlikeSymbols 类似字母的符号 \u2100-\u214FNumberForms 数字形式 \u2150-\u218FArrows 箭头 \u2190-\u21FFMathematicalOperators 数学运算符 \u2200-\u22FFMiscellaneousTechnical 零杂技术用符号 \u2300-\u23FFControlPictures \u2400-\u243FOpticalCharacterRecognition \u2440-\u245FEnclosedAlphanumerics 带括号的字母数字 \u2460-\u24FFBoxDrawing 制表符 \u2500-\u257FBlockElements 方块图形 \u2580-\u259FGeometricShapes 几何图形 \u25A0-\u25FFMiscellaneousSymbols 零杂丁贝符(示意符等) \u2600-\u26FFDingbats \u2700-\u27BFBraillePatterns \u2800-\u28FFCJKRadicalsSupplement \u2E80-\u2EFFKangxiRadicals \u2F00-\u2FDFIdeographicDescriptionCharacters \u2FF0-\u2FFFCJKSymbolsandPunctuation CJK符号和标点 \u3000-\u303FHiragana 平假名 \u3040-\u309FKatakana 片假名 \u30A0-\u30FFBopomofo 注音 \u3100-\u312FHangulCompatibilityJamo \u3130-\u318FKanbun \u3190-\u319FBopomofoExtended 扩展注音 \u31A0-\u31BFEnclosedCJKLettersandMonths 带括号的CJK字母及月份 \u3200-\u32FFCJKCompatibility CJK兼容字符 \u3300-\u33FFCJKUnifiedIdeographsExtensionA CJK统一汉字扩展-A \u3400-\u4dBFCJKUnifiedIdeographs CJK统一汉字 \u4E00-\u9fAFYiSyllables \uA000-\uA48FYiRadicals \uA490-\uA4CFHangulSyllables \uAC00-\uD7A3HighSurrogates \uD800-\uDB7FHighPrivateUseSurrogates \uDB80-\uDBFFLowSurrogates \uDC00-\uDFFFPrivateUse 专用区 \uE000-\uF8FFCJKCompatibilityIdeographs CJK兼容汉字 \uF900-\uFAFFAlphabeticPresentationForms \uFB00-\uFB4FArabicPresentationForms-A \uFB50-\uFDFFCombiningHalfMarks \uFE20-\uFE2FCJKCompatibilityForms CJK兼容形式 \uFE30-\uFE4FSmallFormVariants 小写变体 \uFE50-\uFE6FArabicPresentationForms-Bound \uFE70-\ufeFFSpecials \uFFF0-\uFFFFHalfwidthandFullwidthForms 半形及全形字符 \uFF00-\uFFEF分类 全称 说明Cn UNASSIGNEDLu UPPERCASE_LETTERLl LOWERCASE_LETTERLt TITLECASE_LETTERLm MODIFIER_LETTERLo OTHER_LETTERMn NON_SPACING_MARKMe ENCLOSING_MARKMc COMBINING_SPACING_MARKNd DECIMAL_DIGIT_NUMBERNl LETTER_NUMBERNo OTHER_NUMBERZs SPACE_SEPARATORZl LINE_SEPARATORZp PARAGRAPH_SEPARATORCc CNTRLCf FORMATCo PRIVATE_USECs SURROGATEPd DASH_PUNCTUATIONPs START_PUNCTUATIONPe END_PUNCTUATIONPc CONNECTOR_PUNCTUATIONPo OTHER_PUNCTUATIONSm MATH_SYMBOLSc CURRENCY_SYMBOLSk MODIFIER_SYMBOLSo OTHER_SYMBOLL LETTERM MARKN NUMBERZ SEPARATORC CONTROLP PUNCTUATIONS SYMBOLLD LETTER_OR_DIGITL1 Latin-1all ALLASCII ASCIIAlnum 字母数字(0-9,a-z,A-Z)Alpha 字母(a-z,A-Z)Blank 空格和制表符(' '|\t)Cntrl 控制字符,不可打印Digit 数字(0-9)Graph 可打印且可视字母(例如空格' '是可打印的但不是可视字母,而 `a' 两者都是。)Lower 小写字母Print 可打印字母(非控制字符)Punct 标符号(字母、数字、控制、空白符以外的字母),如:!@/#$%}{<>,./?[]等等。Space 空白符(' ',\t,0x09,0x0A,0x0B,0x0C,0x0D,0x20)Upper 大写字母XDigit 十六进制数字(0-9,a-f, A-F)

替换表达式特殊字符 特殊字符介绍 描述\n 换行\b 向前删除一个字符。当这个字符位于替换串之首时,将删除匹配串之前的一个字符。若匹配串位于行首,将使匹配串所在行与前一行相合并。\d 向后删除一个字符。当这个字符位于替换串之末时,将删除匹配串之后的一个字符。若匹配串位于行末,将使匹配串所在行与下一行相合并。\e 插入一个ESC字符\t 插入一个TAB字符\n n代表查找正则表达式中的子表达式(组)。\1代表第一个子表达式,\2代表第二个子表达式,依次类推。\0代表整个匹配到的字符串。\v 大写下一个字母\U 全部大写以后的字母,直到碰到其它指示符为止。\l 小写下一个字母\L 全部小写以后的字母,直到碰到其它指示符为止。\E 取消所有的字母大小写指示符。

自定义替换表 在查找/替换中使用自定义替换表 有的时候,上述简单的自定义替换功能是不够的。例如,用户可能希望只把出现在括号内的源串替换为目标串。这种文本处理可以通过在查找/替换中使用自定义替换表来解决。 在查找/替换功能中使用自定义替换表的替换函数是\Tn,其中n是0-9的数字, 注意n为0表示第10张替换表。如果略去n,其效果相当于\T1,即使用第一张替换表。例如要把所有放在方括号中的汉字替换为拼音,可以查找“[(\E)]”,替换为“\T{\1}”。即把第一个子表达式的匹配内容按自定义替换表转换。注意,如果\T函数的参数不在替换表的源串中,\T函数的结果与源串相同,即不做任何变换。 有些情况下,用户可能希望只使用替换表的一部分内容。还是以拼音为例,前面给出的替换表中包含了拼音的音调,如果在替换时不希望加上这些音调数字,可以使用“过滤”功能。所谓过滤,其实是用一个正则表达式去分析替换表的目标串,并把其中的某个子表达式取出来。 使用“过滤”时,在“设置自定义替换表”对话框中,点“过滤”按钮,在弹出的对话框中填入一个正则表达式。再以拼音为例,表达式可以写为“(\p{Alpha}+)(\d)”,其中第一对括号中的是不含音调的拼音,第二对括号是音调。在调用\T函数时,JTextPro会在目标串中查找这个正则表达式。但是如何把其中的子表达式取出来呢?\T函数还有一个可选的下标,取第n个子表达式的值就写作\T{...}[n]。所以,把放在方括号中的汉字替换为不带调的拼音,可以查找“[(\E)]”,替换为“\T{\1}[1]” 匹配汉字: Regex r= new Regex(@"[\u4e00-\u9fa5]+"); MatchCollection m=r.Match(yourstring); ------------------------- 如果需要使用正则表达式匹配Unicode字符的话... 这里是几个主要非英文语系字符范围(google上找到的): 2E80~33FFh:中日韩符号区。收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。 3400~4DFFh:中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字。 4E00~9FFFh:中日韩认同表意文字区,总计收容20,902个中日韩汉字。 A000~A4FFh:彝族文字区,收容中国南方彝族文字和字根。 AC00~D7FFh:韩文拼音组合字区,收容以韩文音符拼成的文字。 F900~FAFFh:中日韩兼容表意文字区,总计收容302个中日韩汉字。 FB00~FFFDh:文字表现形式区,收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角符号等。 比如需要匹配所有中日韩非符号字符,那么正则表达式应该是^[\u3400-\u9FFF]+$ 理论上没错, 可是我到msn.co.ko随便复制了个韩文下来, 发现根本不对, 诡异 来源: <正则匹配 - CSDN博客>

字符类别 [:alnum:] 字母和数字 [:alpha:] 字母 [:ascii:] 字符代码 0 - 127 [:blank:] 空格或制表符 [:cntrl:] 控制字符 [:digit:] 十进制数字 (相同于 \d) [:graph:] 可打印字符, 排除空格 [:lower:] 小写字母 [:print:] 可打印字符,包括空格 [:punct:] 可打印字符, 排除文字和数字 [:space:] 空白空间 (不完全和 \s 相同, 还包括 VT: chr(11) ) [:upper:] 大写字母 [:word:] "字" 字符 (相同于 \w) [:xdigit:] 十六进制数 来源: < 正则表达式:匹配符号阿杰百度空间>