关正则表达式Regex处理utf8文本的问题

问题描述

System::Text::RegularExpressions里的Regex是如何处理一些非ASCII编码的文本的呢?比如utf8,gb2312,sjis等还是仍然按照ASCII的处理方式去处理呢?我试了一下,比如说gb2312编码的“郂”这个字,他的末字节在ascii里对应的是“@”String^pattern=gcnewString("@");String^line=gcnewString("郂");Regex^regex=gcnewRegex(pattern);Match^m=regex->Match(line);发现是无法匹配的。难道Regex会根据当前的系统编码去处理匹配?那么如果想让他处理utf8格式的文本,需要做额外的编码的设置么?

解决方案

解决方案二:
自己顶啊顶
解决方案三:
.net项目是unicode的每个字符占2个字节
解决方案四:
Encoding类
解决方案五:
引用2楼hdt的回复:

.net项目是unicode的每个字符占2个字节

那我硬编码传进去的他都给我转成unicode?另外他怎么知道我是什么编码的文字传进去的?不知道这个不好自动转吧
解决方案六:
引用2楼hdt的回复:

.net项目是unicode的每个字符占2个字节

用这个会影响regex的行为?
解决方案七:
建议楼主先去了解什么是regex
解决方案八:
引用6楼hdt的回复:

建议楼主先去了解什么是regex

呃这个就不用了用regex好多年了只是第一次用到windows里.net的这个regex并且对编码也是有所了解的只是不知道.net里的regex对编码的行为如何如果这位大哥很清楚的话还请指教
解决方案九:
引用3楼cj205的回复:

Encoding类

用这个会影响regex的行为?
解决方案十:
引用7楼blueiris的回复:

引用6楼hdt的回复:建议楼主先去了解什么是regex呃这个就不用了用regex好多年了只是第一次用到windows里.net的这个regex并且对编码也是有所了解的只是不知道.net里的regex对编码的行为如何如果这位大哥很清楚的话还请指教

你既然知道,就应该清楚regex是针对字符串,而不是字节的
解决方案十一:
引用9楼hdt的回复:

引用7楼blueiris的回复:引用6楼hdt的回复:建议楼主先去了解什么是regex呃这个就不用了用regex好多年了只是第一次用到windows里.net的这个regex并且对编码也是有所了解的只是不知道.net里的regex对编码的行为如何如果这位大哥很清楚的话还请指教你既然知道,就应该清楚regex是针对字符串,而……

没太明白你的意思。不管了,可否就帮我解释以下下面的问题呢?比如说gb2312编码的“郂”这个字,他的末字节在ascii里对应的是“@”String^pattern=gcnewString("@");String^line=gcnewString("郂");Regex^regex=gcnewRegex(pattern);Match^m=regex->Match(line);发现是无法匹配的。我对“郂”实行了硬编码或者读文件里直接读取应经保证了他在传给String类时一定是gb2312编码的“郂”而不是utf-8或者sjis的等等并且我在日文和中文系统上编译或者运行的结果都是一样的
解决方案十二:
引用2楼hdt的回复:

.net项目是unicode的每个字符占2个字节

另外如果他底层是针对unicode的那么他是如何判断我传给他的是gb2312的还是sjis的呢?只有知道了这些他还好去转码为unicode的呀

时间: 2024-08-15 14:19:56

关正则表达式Regex处理utf8文本的问题的相关文章

Boost学习之正则表达式--regex

来源:http://blog.chinaunix.net/uid-21222282-id-1829265.html 来源:http://www.cnblogs.com/undermoon/archive/2009/11/30/1613508.html 来源:http://blog.csdn.net/guyulongcs/article/details/7838753 来源:http://blog.csdn.net/leonardwang/article/details/6035171 boost

C++中正则表达式(regex) 迭代器(iterator) 详解

正则表达式(regex), 使用boost的regex头文件, 是C++11的新标准, 但是gcc4.8.1并未完全支持, 所以使用boost库; 具体安装: http://blog.csdn.net/caroline_wendy/article/details/17282187 正则表达式的书写规范, 以ECMAScript为例, 使用迭代器可以遍历原字符串, 输出符合要求的所有字符串; 使用prefix()和suffix()方法, 可以输出前一个未匹配的字符串和后一个未匹配的字符串; 正则表

C++中正则表达式(regex) 替换(replace) 详解

正则表达式, 可以替换(replace)匹配的字符串, 使用regex_replace()函数, 需要指定替换的格式; 也可以提供参数, 进行特定的输出, 替换格式的命名空间: "boost::regex_constants::" 编程环境: gcc 4.8.1 + eclipse cdt + c++11 + boost 代码: #include <iostream> #include <string> #include <boost/regex.hpp&

linux下如何使用正则表达式regex库对通过libpcap在线抓的数据包进行筛选?

问题描述 linux下如何使用正则表达式regex库对通过libpcap在线抓的数据包进行筛选? linux下有一个用c写的通过libpcap抓取数据包的程序,如何通过正则表达式库regex对数据包进行筛选?有大神的话请贴一部分代码什么的,,, 解决方案 libpcap程序里,主体通过pcap_loop或者pcap_dispatch进行循环,需要提供报文的回调函数 在回调函数里面,对报文进行解析,逐层剥离协议头(ip->tcp->7层) 根据需要进行7层解析(例如解析http字段,可选) 对解

正则表达式 regex什么意思

问题描述 正则表达式 regex什么意思 Regex regex = new Regex("[u4e00-u9fa5]+", RegexOptions.Compiled)正则表达式什么意思?u4e00-u9fa5]这个代表的是什么?码型吗? 解决方案 u4e00-u9fa5 所有汉字的编码 解决方案二: unnnn Unicode代码中十六进制代码为nnnn的字符 解决方案三: 匹配英文字符数字串: " ^[A-Za-z0-9]+$"

Java使用正则表达式(regex)匹配中文实例代码_java

只能输入中文 /** * 22.验证汉字 * 表达式 ^[\u4e00-\u9fa5]{0,}$ * 描述 只能汉字 * 匹配的例子 清清月儿 */ @Test public void a1() { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); String regex = "^[\\u4e00-\\u9fa5]*$"; Matcher m = Pattern.compile(regex).matc

正则表达式Regex类常用方法

1. IsMatch()方法,IsMatch()方法实际上是一个返回Bool值得方法,如果测试字符满足正则表达式返回True否则返回False.例子: //匹配的正则表达式,去掉@不影响效果 Regex r = new Regex(@"^[0-9]"); //开始匹配 Match m = r.Match(this.textBox1.Text); while (m.Success) { MessageBox.Show("首位是数字"); return; } 检测tex

正则表达式(regex)或操作符”|“使用易出现功能Bug_正则表达式

接上一篇:正则表达式(regex)错误使用导致功能漏洞 ,我们继续梳理,正则表达式错误使用,导致功能设计漏洞(bug),做web方面,需要掌握的知识很多,网站开发这项工作,在国内也就10多年,很多开发人员,都是通过:培训(自学) ->模仿->做项目 ,这样一个过程.很多就是修修改改后,就成为了web开发工程师.这行入门低,很容易上手.但是想成为大师级的,还是很不容易.需要学习,掌握的知识几十门.而对于刚刚入门同人,很多时候因为缺乏系统学习,理论支持.导致提升有些心有余而力不足啦!因此,出现这些

正则表达式(regex)错误使用导致功能漏洞分析_正则表达式

写在前面的话 正则表达式它的强大字符串匹配功能,导致目前在各种程序语言中,都非常流行!它被用来描述或者匹配一系列符合某个句法规则的字符串.很多刚刚使用正则表达式都是从听说这个,然后在要使用时候去网上搜索. 很少人一开始就系统去学习正则表达式,从定义原理使用系统学习.因为,对应初学者觉得它太麻烦了,好多原字符.看到那么长一串字符,就很头痛.因此,也懒得去学习.一般遇到问题,直接去网上搜索.如:"邮箱正则表达式,手机号正则表达式,url正则表达式-.." ,我们发现一个很有意思现象,&qu