2015.3.12Arinc424 Tools中SiniArincCls.csParserFile(string sFile)函数正则表达式理解
原文:
string RegEx1 = @"(\[ITEM\]\s*=[\S\s]*?(?=\[ITEM\])|\[ITEM\]\s*=[\S\s]*)";//用来识别主记录和后续记录,并完成分组
解释
1.该表达式首尾的()没具体含义,可以去掉(不完全是,见后面解释)
2.该表达式是一个2重选择结构,以|分开
3. 第1部分:\[ITEM\]\s*=[\S\s]*?(?=\[ITEM\]) 最后有个(?=)结构,表示零宽前向断言,该句中表示截止到[ITEM]开始位置;[\S\s]*结构表示任何字符可以出现不限次,加上?表示懒惰模式,匹配最短的任何字符,结果就一个多余字符也不匹配了,只匹配[ITEM\] =
4.第2部分\[ITEM\]\s*=[\S\s]*与第一部分开头一样,表示或者匹配'[ITEM\]='开始的任何部分,注意*号后面没有?表示=后可以跟无限多字符直到结束
整条语句的含义是以'[ITEM]='分割匹配,前面各次匹配'[ITEM]=XXXXXX'[ITEM]''结构(不包括结尾的[ITEM]),最后一次匹配'[ITEM]='结构
Regex reg = new Regex(@"[\w\W]*\n");
string input = @"3
4
5";
Match mc1 = reg.Match(input); 这样匹配出的结果只有一条 3\r\n4\r\n
如果将条件改为Regex reg = new Regex(@"[\w\W]*?\n"); //*后面加一个?表示懒惰模式,尽量少地匹配
匹配结果会有两条'3\r\n'和'4\r\n'
加深对*?懒惰模式的理解不加?表示贪婪模式,尽量多地匹配即使已经满足条件了3后面\n仍然往后寻找,直到最大程度满足条件。而懒惰模式只要一满足条件立即终止寻找。而且贪婪模式并不局限于一个*所有该范围内的*都将采用懒惰模式
Regex reg = new Regex(@"[123]b");
string input = @"321ba4b5";
此时匹配结果是1b,跟想象一样但
如果将条件改为"[123]*b" 则结果为321b。跟想象中不一样
这说明[]*的*可以取[]中的任何字符来重复,而不局限于某个字符重复
(?<==)[\w\W]*?(?=\r\n) 一个=的后向定位加一个\r\n的前向定位 表示=和回车之间的字符,不包括=或回车
()在分组的作用
Regex reg = new Regex(@"(1)(2)(3)"); 和Regex reg = new Regex(@"123"); 的区别
string input = @"a123b";
Match mc1 = reg.Match(input);
string res = mc1.ToString();
上述两种写法反应在res上都一样都是123
但是mc1.Groups.count不一样
前者数量为4,后者为1
前者4个Group取值分别为 123,1,2,3
后者1个Group取值为123
说明在匹配条件中加()可以对匹配结果进行分组
而Regex reg = new Regex(@"(123)");
Group结果为2,两个Group取值一样都是123
Regex reg = new Regex(@"(1)2(3)");
Group结果为3,分别是123,1,3
说明分组的数量是()对数量+1
//一句话实现字符串过滤数字或非数字
string ts = "sdf33sdf43sdf334";
string sz=new Regex("[^0-9]").Replace(ts,""); //只保留数字
string zm=new Regex("[0-9]").Replace(ts,""); //只保留非数字
string wei = new Regex(@"^\d{6}.*\d*N").Match("321564N1254784.34E").ToString();
string jin = new Regex(@"N\d{7}.*\d*E$").Match("321564N1254783.34E").ToString();
2015.3.12Arinc424 Tools中SiniArincCls.csParserFile(string sFile)函数正则表达式理解的更多相关文章
- Python中网络编程对 listen 函数的理解
listen函数的第一个参数时SOCKET类型的,该函数的作用是在这个SOCKET句柄上建立监听,至于有没有客户端连接进来,就需要accept函数去进行检查了,accept函数的第一个参数也是SOCK ...
- Java中如何将String转成Date
Java中如何将String转成Date 最近在开发Json数据反序列化为Java对象的时候发现spring mvc 和 Jackson 对Date类型对支持不是特别好,虽然在Java对象序列化为Js ...
- java中特殊的String类型
Java中String是一个特殊的包装类数据有两种创建形式: String s = "abc"; String s = new String("abc"); 第 ...
- C# 中怎么将string转换成int型
int intA = 0;1.intA =int.Parse(str);2.int.TryParse(str, out intA);3.intA = Convert.ToInt32(str);以上都可 ...
- c#中 uint--byte[]--char[]--string相互转换汇总
原文:c#中 uint--byte[]--char[]--string相互转换汇总 在在做一些互操作的时候往往需要一些类型的相互转换,比如用c#访问win32api的时候往往需要向api中传入DWOR ...
- 用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean)
用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean) 安装: 在help中eclise marksplace中查询JBo ...
- java中string.trim()函数的使用
java中string.trim()函数的的作用是去掉字符串开头和结尾的空格,防止不必要的空格导致的错误. public static void main(String arg[]){ String ...
- C++中int与string的转化
C++中int与string的转化 int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释.缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀, ...
- java和js中int和String相互转换常用方法整理
java中int和String的相互转换常用的几种方法: int > String int i=10;String s="";第一种方法:s=i+""; ...
随机推荐
- CentOS 7 安装 docker-machine
https://github.com/docker/machine/releases/ 指令: curl -L https://github.com/docker/machine/releases/d ...
- Crashlytics功能集成
总共分三步: 1. 将Crashlytics.framework和Fabric.framework拷贝到工程中: 2.配置工程的info.plist文件,如下: APIKey和Build secret ...
- myEclipse 输入时英文自动变成2个字符大小
比如这样: ——这是输入法的问题,输入法被误设为圆角了. 输入法有区分圆角半角,正常来说我们使用的都是半角. 那么如何切换半圆角? ——比如:百度输入法 首先,将半圆角的快捷键显示出来: ——点击“d ...
- AODH: ALARM EVENTS IN OPENSTACK
AODH是从Ceilometer分离出来的一个子项目,开始于OpenStack Liberty,用来提供alarm机制. 除了之前Ceilometer有的基于sample的警报机制,AODH还添加了基 ...
- linux防火墙开关
对于普通Linux机器开关防火墙命令: 1重启后生效 chkconfig iptables off chkconfig iptables on 2即时生效 serivce iptables statu ...
- hdu 2147 kiki's game(找规律)
kiki's game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 40000/10000 K (Java/Others)Total ...
- Git之(一)Git是什么[转]
为什么使用Git 孔子曾经曰过的,名正则言顺 言顺则事成. 我们在学习一项新技术之前,弄清楚为什么要学它至关重要,至于为什么要学习Git,我用一段if-else语句告诉你原因: if(你相信我){ 我 ...
- 一张图入门QT设计器
哈哈哈,这个名字听起来就是骗阅读量的.
- svn默认地址老发生改变,记下默认路径
C:\Users\Administrator\AppData\Roaming\Subversion
- 自定义php(NON-CORE WORDPRESS FILE) 引用 wordpress
在文件头头添加下面代码,实现此页面可以调用wordpress的内置方法 <?php $parse_uri = explode ( 'wp-content', $_SERVER ['SCRIPT_ ...