文档库 最新最全的文档下载
当前位置:文档库 › AFTN报文的正则表达式

AFTN报文的正则表达式

AFTN报文的正则表达式
AFTN报文的正则表达式

编组3:通过

(\((FPL|CHG|CNL|DEP|ARR|DLA|CPL|EST|CDN|ACP|LAM|RQP|RQS|SPL|ALR|RCF)|\((FPL| CHG|CNL|DEP|ARR|DLA|CPL|EST|CDN|ACP|LAM|RQP|RQS|SPL|ALR|RCF)[A-Z]{1,4}\/[A-Z]{1,4}\d{3}[A-Z]{1,4}\/[A-Z]{1,4}\d{3})

编组5:

\-(INCERFA|ALERFA|DETRESFA)\/([A-Z]{4}[A-Z]{3})([A-Z]{1}|\bX)\/.*

问题:

●.*的使用,扩大了匹配范围,在测试中把多余的内容也包含进去了;

●([A-Z]{4}[A-Z]{3}可以简化为[A-Z]{7},会提高运行效率;

●\bx修改为|\bX|\d{1},因为最后一位可能不只是x。

调整为并通过:

\-(INCERFA|ALERFA|DETRESFA)\/([A-Z]{7})([A-Z]{1}|\bX|\d{1})\/\w+(\s\w+)*

编组7:通过

\-([A-Z]{3}\d{4}|[A-Z]{3}\d{3}([Q-Z]{1})?)(\/A\d{4})?

编组8:通过

\-(([IVYZ]{1}[GMNSX]{1})|([IVYZ]{1}*B))\b

编组9:

\-\d{0,2}\w{3,4}\/[HML]{1}

问题:

●\w{3,4}应该是\w{2,4},应为是两到四个字符,而不是三到四个字符;

调整为并通过:

\-\d{0,2}\w{2,4}\/[HML]{1}

编组10:

\-([NS]{1}[A-Z]{1,}\/[NACXPISD]{1,2})

问题:

[A-Z]{1,}不完整。应该为[A-Z]{1,24}

调整为并通过:

\-([NS]{1}[A-Z]{1,24}\/[NACXPISD]{1,2})

编组13:

\-([A-Z]{4}|AFIL)\s|\-([A-Z]{4}|AFIL)\d{4}(\s\s|\-)

问题:

●该表达式在测试一下报文时,不能捕获到13编组:

ZCZC CXC0804 090629

FF ZBHHZXZX

090629 ZYHBZPZX

(FPL-CSN6279-I*b

-A319/M-SHDGIRWZ/C

-ZYHB0740

-K0846S0980 HRB B451 NDG P28/K0855S0950 J754 MHN

-ZYMH0121 ZYTX

-REG/B6190 SEL/AMEL OPR/CHINA SOUTHERN NA V/RNA V5

ZCZC CXC0805 090630

GG ZBHHZXZX

090629 ZBCFZPZX

(ARR-CCA1239-ZBHH-ZBCF0629)

NNNN

原因分析:由于\s\s无法得到匹配,把(\s\s|\-)改为(\s\-|\-)便能够捕获到该报文中的13编组。该表达式最后的(\s\-|\-)不能省略,否则会把其他编组中的机场+时间这样的内容也捕获到。最后改为并通过:

\-([A-Z]{4}|AFIL)\s|\-([A-Z]{4}|AFIL)\d{4}(\s\-|\-)

编组14:

\-\w{2,11}[[^_-/)(]\/\d{4}(M\d{4}?|S\d{4}?|A\d{3}?|F\d{3}?){1,}([AB]{1})?

问题:

●在CPL报文中必然出现14编组,所以用CPL报文测试14编组的正则表达式比较好。

上述表达式用CPL测试时没能捕获到14编组。上面表达式在{1,}处没有写完整。

●[[^_-/)(]用意为何?去掉该项后,可以找到匹配项

最后改为并通过:

\-\w{2,11}[[^_-/)(]\/\d{4}(M\d{4}?|S\d{4}?|A\d{3}?|F\d{3}?){1,2}([AB]{1})?

编组15:

\-(K\d{4}?|N\d{4}?|M\d{3}?)(M\d{4}?|S\d{4}?|A\d{3}?|F\d{3}?)\s(.*[^=.:]\n)+? 只能显示一行编组16:注:16编组和17编组不好区别

\-[A-Z]{4}\)|\-[A-Z]{4}(\d{4})\s[A-Z]{4}(\s[A-Z]{4})?

编组17:

\-[A-Z]{4}\d{4}\)|\-[A-Z]{4}\d{4}\s[A-Z]{5,}

编组18:

\-0|((\-)?EET.*(\n.*)?|(\-)?RIF.*(\n.*)?|(\-)?\s?REG.*(\n.*)?|(\-)?SEL\s.*(\n.*)?|(\-)?OPR.*(\n.*)?|(\ -)?STS.*(\n.*)?|(\-)?TYP.*(\n.*)?|(\-)?PER.*(\n.*)?|(\-)?COM.*(\n.*)?|(\-)?DAT\s.*(\n.*)?|(\-)?NA V.*(\n.*)?|(\-)?\sDEP.*(\n.*)?|(\-)?DEST.*(\n.*)?|(\-)?ALTN.*(\n.*)?|(\-)?RALT.*(\n.*)?|(\-)?RMK .*(\n.*)?) 只能一行一行显示,提取不完整!

识别不出来的:

-RFP/Q1 EET/PIKAS0018 ZHWH0101 ZBPE0128 ZMUB0235 UNKL0419 UNNT0516 USRR0643 USHH0703 USSS0731 UUYY0759 ULKK0832 ULWW0853 ULLL0923

EETT0954 EVRR1022 ESAA1028 EKDK1103 EDWW1113 EDGG1136 EBUR1152

LFFF1202 REG/FGSPT SEL/DJBH DA T/SV RMK/ADSB TCAS EQUIPPED CORRECT VERSION DOF/100101

\-0|(\-)?EET.*|(\-)?RIF.*|(\-)?\s?REG.*|(\-)?SEL\s.*|(\-)?OPR.*|(\-)?STS.*|(\-)?TYP.*|(\-)?PER.*|(\ -)?COM.*|(\-)?DAT\s.*|(\-)?NA V.*|(\-)?\sDEP.*|(\-)?DEST.*|(\-)?ALTN.*|(\-)?RALT.*|(\-)?RMK.* \-0|(\-)?EET.*|(\-)?RIF.*|(\-)?\sREG.*|(\-)?SEL\s.*|(\-)?OPR.*|(\-)?STS.*|(\-)?TYP.*|(\-)?PER.*|(\-) ?COM.*|(\-)?DAT\s.*|(\-)?NA V.*|(\-)?\sDEP.*|(\-)?DEST.*|(\-)?ALTN.*|(\-)?RALT.*|(\-)?RMK.* \-0|((\-)?EET.*(\n.*)?|(\-)?RIF.*(\n.*)?|(\-)?\s?REG.*(\n.*)?|(\-)?SEL\s.*(\n.*)?|(\-)?OPR.*(\n.*)?|(\ -)?STS.*(\n.*)?|(\-)?TYP.*(\n.*)?|(\-)?PER.*(\n.*)?|(\-)?COM.*(\n.*)?|(\-)?DAT\s.*(\n.*)?|(\-)?NA V.*(\n.*)?|(\-)?\sDEP.*(\n.*)?|(\-)?DEST.*(\n.*)?|(\-)?ALTN.*(\n.*)?|(\-)?RALT.*(\n.*)?|(\-)?RMK .*(\n.*)?) 都不准

编组19:

\-E\/\d{4}\s(P\/\d{1,3})?\s(R\/[UVE]{1,3})?\s(S\/[PDMJ]{1,4})?\s(J\/[LFUV]{1,4})?\s(D\/\d{2}? \s\d{3}?\sC?\s[A-Z]{3,8}?)\s(D\/.*)?\s(A\/.*)?\s(N\/.*)? 错

(\-E\/\d{4})?(\sP\/\d{1,3})?(\sR\/[UVE]{1,3})?(\sS\/[PDMJ]{1,4})(\sJ[\/LFUV]{1,4})?(\sD\/\d{1} \s\d{2}\sC\s[A-Z]{3,})?(\sD\/[A-Z]{3,10}\s\w{航空器注册标志字符})?(\sA\/[A-Z]{2,10}明语)?(\sN\/[A-Z]{2,10})? 不准确

编组20:

\-NIL|\-NOT\sKNOWN|(\-[A-Z]{2}|\-[A-Z]{3,10})\s[A-Z]{4}([A-Z]{2}|\w{2})\s\d{4}\s\d{2,3}\. \d{1,2}.*

编组21:

\-NIL|\-NOT\sKNOWN|\-\d{4}\s\d{2,3}\.\d{1,2}\s\w{2,11}[^_]\s\d{4}\s[A-Z]{1,}\s.*

编组22:

\-((3|5|7|8|9|10|13|14|15|16|17|18|19|20|21|22)\/\w{2,10})(\/\w{1,10})?

ZCZC开头NNNN结尾:

(ZCZC((.*[^=.:]\n)+?)\bNNNN)

JS正则表达式大全

JS正则表达式大全 JS正则表达式大全【1】 正则表达式中的特殊字符【留着以后查用】字符含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。 ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" $ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A" * 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa + 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa ? 匹配前面元字符0次或1次,/ba*/将匹配b,ba (x) 匹配x保存x在名为$1...$9的变量中 x|y 匹配x或y {n} 精确匹配n次 {n,} 匹配n次以上 {n,m} 匹配n-m次 [xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) [^xyz] 不匹配这个集合中的任何一个字符 [\b] 匹配一个退格符 \b 匹配一个单词的边界 \B 匹配一个单词的非边界 \cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M \d 匹配一个字数字符,/\d/ = /[0-9]/ \D 匹配一个非字数字符,/\D/ = /[^0-9]/ \n 匹配一个换行符 \r 匹配一个回车符 \s 匹配一个空白字符,包括\n,\r,\f,\t,\v等 \S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/ \t 匹配一个制表符 \v 匹配一个重直制表符 \w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配

正则表达式常用发发总结

//判断输入内容是否为空 function IsNull(){ var str = document.getElementById('str').value.trim(); if(str.length==0){ alert('对不起,文本框不能为空或者为空格!'); //请将“文本框”改成你需要验证的属性名称! } } //判断日期类型是否为YYYY-MM-DD格式的类型 function IsDate(){ var str = document.getElementById('str').value.trim(); if(str.length!=0){ var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/; var r = str.match(reg); if(r==null) alert('对不起,您输入的日期格式不正确!'); //请将“日期”改成你需要验证的属性名称! } } //判断日期类型是否为YYYY-MM-DD hh:mm:ss格式的类型 function IsDateTime(){ var str = document.getElementById('str').value.trim();

if(str.length!=0){ var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}): (\d{1,2}):(\d{1,2})$/; var r = str.match(reg); if(r==null) alert('对不起,您输入的日期格式不正确!'); //请将“日期”改成你需要验证的属性名称! } } //判断日期类型是否为hh:mm:ss格式的类型 function IsTime() { var str = document.getElementById('str').value.trim(); if(str.length!=0){ reg=/^((20|21|22|23|[0-1]\d)\:[0-5][0-9])(\:[0-5][0-9])?$/ if(!reg.test(str)){ alert("对不起,您输入的日期格式不正确!"); //请将“日期”改成你需要验证的属性名称! } } } //判断输入的字符是否为英文字母

正则表达式

正则表达式 一、什么是这则表达式 正则表达式(regular expressions)是一种描述字符串集的方法,它是以字符串集中各字符串的共有特征为依据的。正则表达式可以用于搜索、编辑或者是操作文本和数据。它超出了java程序设计语言的标准语法,因此有必要去学习特定的语法来构建正则表达式。一般使用的java.util.regex API所支持的正则表达式语法。 二、测试用具 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex{ public static void main(String[]args)throws Exception{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); if(br==null){ System.out.println("没有输入任何数据"); System.exit(1); } while(true){ System.out.print("输入表达式:"); Pattern pattern=https://www.wendangku.net/doc/c611798882.html,pile(br.readLine()); System.out.print("输入字符串:"); Matcher matcher=pattern.matcher(br.readLine()); boolean found=false; while(matcher.find()){ System.out.println("找到子字符串"+matcher.group()+" 开始于索引"+matcher.start()+"结束于索引"+matcher.end()+"\n") found=true; } if(!found){ System.out.println("没有找到子字符串\n"); } } } }

(完整版)OSPF的五种报文

OSPF的五种报文 2008-09-14 10:53 Router-LSA 由每个路由器生成,描述了路由器的链路状态和花费。传递到整个区域。 Network-LSA,由DR生成,描述了本网段的链路状态,传递到整个区域。 Net-Summary-LSA,由ABR生成,描述了到区域内某一网段的路由,传递到相关区域。 Asbr-Summary-LSA,由ABR生成,描述了到ASBR的路由,传递到相关区域。 AS-External-LSA,由ASBR生成,描述了到AS外部的路由,传递到整个AS(STUB 区域除外)。 1、hello报文:最常用的一种报文,周期性的发送给本路由器的邻居。内容包括一些定时器的数值、DR、BDR 以及自己已知的邻居。Hello 报文格式如表4-2 所示。 主要字段解释如下: * Network Mask:发送Hello 报文的接口所在网络的掩码。 * HelloInterval:发送Hello 报文的时间间隔。如果相邻两台路由器的Hello 间隔时间不同,则不能建立邻居关系。 * Rtr Pri:DR 优先级。如果设置为0,则路由器不能成为DR/BDR。

* RouterDeadInterval:失效时间。如果在此时间内未收到邻居发来的Hello 报文,则认为邻居失效。如果相邻两台路由器的失效时间不同,则不能建立邻居关系。 2、DD报文:两台路由器进行数据库同步时,用DD 报文来描述自己的LSDB,内容包括LSDB 中每一条LSA 的Header(LSA 的Header 可以唯一标识一条LSA)。LSA Header 只占一条LSA 的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header 就可以判断出是否已有这条LSA。DD 报文格式如表4-3 所示。 主要字段的解释如下: * Interface MTU:在不分片的情况下,此接口最大可发出的IP 报文长度。 * I(Initial):当发送连续多个DD 报文时,如果这是第一个DD 报文,则置为1,否则置为0。 * M(More):当发送连续多个DD 报文时,如果这是最后一个DD 报文,则置为0。否则置为1,表示后面还有其他的DD 报文。 * MS(Master/Slave):当两台OSPF 路由器交换DD 报文时,首先需要确定双方的主从关系,Router ID 大的一方会成为Master。当值为1 时表示发送方为Master。 * DD Sequence Number:DD 报文序列号,由Master 方规定起始序列号,每发送一个DD 报文序列号加1,Slave 方使用Master 的序列号作为确认。主从双方利用序列号来保证DD 报文传输的可靠性和完整性。 3、LSR:两台路由器互相交换过DD 报文之后,知道对端的路由器有哪些LSA 是本地的LSDB所缺少的,这时需要发送LSR 报文向对方请求所需的LSA。内容包

正则表达式教程

正则表达式 学习要点: 1.什么是正则表达式 2.创建正则表达式 3.获取控制 4.常用的正则 假设用户需要在HTML 表单中填写姓名、地址、出生日期等。那么在将表单提交到服 务器进一步处理前,JavaScript 程序会检查表单以确认用户确实输入了信息并且这些信息是 符合要求的。 一.什么是正则表达式 正则表达式(regular expression)是一个描述字符模式的对象。ECMAScript 的RegExp 类 表示正则表达式,而String 和RegExp 都定义了使用正则表达式进行强大的模式匹配和文本 检索与替换的函数。 正则表达式主要用来验证客户端的输入数据。用户填写完表单单击按钮之后,表单就会 被发送到服务器,在服务器端通常会用PHP、https://www.wendangku.net/doc/c611798882.html, 等服务器脚本对其进行进一步处理。 因为客户端验证,可以节约大量的服务器端的系统资源,并且提供更

好的用户体验。 二.创建正则表达式 创建正则表达式和创建字符串类似,创建正则表达式提供了两种方法,一种是采用new 运算符,另一个是采用字面量方式。 1.两种创建方式 var box = new RegExp('box'); //第一个参数字符串 var box = new RegExp('box', 'ig'); //第二个参数可选模式修饰符 模式修饰符的可选参数 参数含义 i 忽略大小写 g 全局匹配 m 多行匹配 var box = /box/; //直接用两个反斜杠 var box = /box/ig; //在第二个斜杠后面加上模式修饰符 2.测试正则表达式 RegExp 对象包含两个方法:test()和exec(),功能基本相似,用于测试字符串匹配。test() 方法在字符串中查找是否存在指定的正则表达式并返回布尔值,如果存在则返回true,不存 在则返回false。exec()方法也用于在字符串中查找指定正则表达式,如果exec()方法执行成

美式报文格式说明

美国气象报文简要说明 美国气象报文主体部分与国内报文基本一致,只是有些项目(风速、能见度等)采用的单位不一样。美国气象报文与国内最大的区别在于它有“备注”(RMK)部分,用于说明详细的天气温度、露点等附加信息。 下面就美国气象报文与国内报文的差异部分作详细解释: 国内报文: METAR ZSHC 081100Z 35003MPS 0700 R30/0900 -SG FZFG OVC006 M00/M01 Q1026 NOSIG= 美国报文: METAR KGNV 201953Z AUTO 24015KT 3/4SM R28/2400FT +TSRA BKN008 OVC015CB 26/25 A2985 RMK TSB32RAB32 一:地面风 1. 美国报文风速采用节(KT)为单位,一般的,我们认 为1MPS≈2KT 2. 风向是指风的来向,且为真北方向; 3. 当风速小于等于6KT,且风向不定,标注标示符 “VRB”; 4. 但风速小于3KT,定义为静风(calm),报文中用 -1-

00000KT 表示 二:能见度 1. 美国报文能见度采用英里(SM)为单位,一般的, 1SM=1600M 2. 在自动观测报文中,M1/4SM 表示能见度小于 1/4SM,10SM 表示能见度大雨等于10SM(类似国 内报文中9999)。 3. 值得注意的是,由于报文编排的缘故,当能见度大于 1SM 时能见度数值显示间隔比较大,比如:METAR KGNV 201953Z AUTO 24015KT 1 3/4SM……,这 时该机场能见度为一又四分之三英里,即2800 米。 4. 如果,报文中能见度没有显示单位表示符,则默认为 是米。 三:跑到视程 1. 美国报文跑道视程采用英尺(FT)为单位; 2. 当RVR 数据丢失,标注RVRNO 四: 备注部分 1. 美国气象报文与国内报文比较增加了备注部分,表示 符“RMK” ①当气象现象在本场5SM 以内,则认为该气象现象 是在本场发生的; ②当气象现象在本场5SM-10SM 以内,则报告附近

常用正则表达式

1. 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 2. "^\d+$"//非负整数(正整数+ 0) 3. "^[0-9]*[1-9][0-9]*$"//正整数 4. "^((-\d+)|(0+))$"//非正整数(负整数+ 0) 5. "^-[0-9]*[1-9][0-9]*$"//负整数 6. "^-?\d+$"//整数 7. "^\d+(\.\d+)?$"//非负浮点数(正浮点数+ 0) 8. "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"//正浮点数 9. "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"//非正浮点数(负浮点数+ 0) 10. "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"//负浮点数 11. "^(-?\d+)(\.\d+)?$"//浮点数 12. "^[A-Za-z]+$"//由26个英文字母组成的字符串 13. "^[A-Z]+$"//由26个英文字母的大写组成的字符串 14. "^[a-z]+$"//由26个英文字母的小写组成的字符串 15. "^[A-Za-z0-9]+$"//由数字和26个英文字母组成的字符串 16. "^\w+$"//由数字、26个英文字母或者下划线组成的字符串 17. "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"//email地址 18. "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"//url 19. /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 20. /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 21. "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil 22. /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //电话号码 23. "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}| 1dd|2[0-4]d|25[0-5])$" //IP地址 24. 25. 匹配中文字符的正则表达式:[\u4e00-\u9fa5] 26. 匹配双字节字符(包括汉字在内):[^\x00-\xff] 27. 匹配空行的正则表达式:\n[\s| ]*\r 28. 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 29. 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 30. 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 31. 匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 32. 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 33. 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 34. 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 35. 36. 37. 元字符及其在正则表达式上下文中的行为:

正则表达式教程

正则表达式教程 早期起源 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloc h 和Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫Stephen Kleene 的数学家在McCulloch 和Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。 随后,发现可以将这一工作应用于使用Ken Thompson 的计算搜索算法的一些早期研究,K en Thompson 是Unix 的主要发明人。正则表达式的第一个实用应用程序就是Unix 中的qed 编辑器。 如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。 正则表达式 如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。 请回想一下在硬盘上是如何查找文件的。您肯定会使用? 和* 字符来帮助查找您正寻找的文件。? 字符匹配文件名中的单个字符,而* 则匹配一个或多个字符。一个如'data?.dat' 的模式可以找到下述文件: data1.dat data2.dat datax.dat dataN.dat 如果使用* 字符代替? 字符,则将扩大找到的文件数量。'data*.dat' 可以匹配下述所有文件名: data.dat data1.dat data2.dat data12.dat datax.dat dataXYZ.dat 尽管这种搜索文件的方法肯定很有用,但也十分有限。? 和* 通配符的有限能

VC正则表达式的使用

VC正则表达式的使用 2010年9月11日星期六邵盛松 正则表达式是一种对字符进行模糊匹配的一个公式。在数据有效性验证,查找,替换文本中都可以使用正则表达式。 本篇文章主要描述的是使用ATL中两个模板类CAtlRegExp和CAtlREMatchContext。 在使用CAtlRegExp类之前需要添加#include 这个头文件。 RegExp是Regular Expression的缩写 以匹配邮件地址字符串为例说明两个类的使用 该示例更改自https://www.wendangku.net/doc/c611798882.html,/en-us/library/k3zs4axe(VS.80).aspx CString strRegex=L"({[0-9_]+@[a-zA-Z0-9]+[.][a-zA-Z0-9]+[.]?[a-zA-Z0-9]+})"; CString strInput; strInput=L"admin@https://www.wendangku.net/doc/c611798882.html,"; CAtlRegExp reRule; wchar_t *wt = (wchar_t *)(LPCTSTR)strRegex; REParseError status = reRule.Parse((const ATL::CAtlRegExp::RECHAR *)wt); if (REPARSE_ERROR_OK != status) { return 0; } CAtlREMatchContext mcRule; wt = (wchar_t *)(LPCTSTR)strInput; if (!reRule.Match((const ATL::CAtlRegExp::RECHAR *)wt,&mcRule)) { AfxMessageBox(L"您输入的邮件地址不合法!"); } else { for (UINT nGroupIndex = 0; nGroupIndex < mcRule.m_uNumGroups; ++nGroupIndex) { const CAtlREMatchContext<>::RECHAR* szStart = 0;

TCP报文格式详解

TCP报文格式详解 TCP报文格局详解 2011-08-31 TCP和谈只定义了一种报文格局 建立、拆除连接、传输数据应用同样的报文 TCP报文格局 TCP报文段首部(20个字节) 源端口和目标端口:各占2个字节,16比特的端标语加上32比特的IP地址,共同构成相当于传输层办事接见点的地址,即“插口”; 这些端口可用来将若干高层和谈向下复用; 序号字段和确认序号字段: 序号:占4个字节,是本报文段所发送的数据项目组第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,一报文段的序号为300,而起数据供100字节,则下一个报文段的序号就是400; 确认序号:占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号; 因为序号字段有32比特长,可以对4GB的数据进行编号,如许就可包管当序号反复应用时,旧序号的数据早已在收集中消散了;

数据偏移字段 数据偏移:占4比特,默示数据开端的处所离TCP报文段的肇端处有多远。这实际上就是TCP报文段首部的长度。因为首部长度不固定,是以数据偏移字段是须要的。 保存字段:6比特,供往后应用,今朝置为0。 6个比特的把握字段 紧急比特URGent:当URG=1时,注解此报文应尽快传送,而不要按本来的列队次序来传送。与“紧急指针”字段共同应用,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,使接管方可以知道紧急数据共有多长; 确认比特ACK:只有当ACK=1时,确认序号字段才有意义; 急迫比特PSH:当PSH=1时,注解恳求远地TCP将本报文段立即传送给其应用层,而不要比及全部缓存都填满了之后再向上交付。 复位比特ReSeT:当RST=1时,注解呈现严重错误,必须开释连接,然后再重建传输连接。复位比特还用来拒绝一个不法的报文段或拒绝打开一个连接; 同步比特SYN:在建树连接时应用,当SYN=1而ACK=0时,注解这是一个连接恳求报文段。对方若赞成建树连接,在发还的报文段中使SYN=1和ACK=1。是以,SYN=1默示这是一个连接恳求或毗邻接管报文,而ACK的值用来区分

js正则表达式使用

js正则表达式使用 一,概述 1,正则表达式,可以说是任何一种编程语言都提供的机制,它主要是提供了对字符串的处理能力。 2,正则表达式在页面处理中的使用场景: 1)表单验证。验证某些域符合某种规则,例如邮件输入框必须输入的是邮件、联系电话输入框输入的必须是数字等等 2)处理DOM模型。例如通过表达式定位DOM中的一个对象或一系列对象,一个例子就是定位id属性中含有某个特殊字符的div对象。 3)纯编程逻辑。直接用于编程的逻辑之中。 3,说明:本部分所举的正则表达式的代码片断,都是经过测试的,但有一点需要注意,对于换行的字符串的定义,我们在表述时使用的是类似如下的形式: var str=“It?s is a beautiful city”; 这种形式直接写在JS代码中是错误的,那如何获取具有换行的字符串呢?简单的办法:在textarea中输入文本并换行,然后将该值赋给JS变量即可。例如: var str=document.forms[0].mytextarea.value; 二,语法与使用 1,定义正则表达式 1)定义正则表达式有两种形式,一种是普通方式,一种是构造函数方式。 2)普通方式:var reg=/表达式/附加参数 表达式:一个字符串,代表了某种规则,其中可以使用某些特殊字符,来代表特殊的规则,后面会详细说明。 附加参数:用来扩展表达式的含义,目前主要有三个参数: g:代表可以进行全局匹配。 i:代表不区分大小写匹配。 m:代表可以进行多行匹配。 上面三个参数,可以任意组合,代表复合含义,当然也可以不加参数。 例子: var reg=/a*b/; var reg=/abc+f/g; 3)构造函数方式:var reg=new RegExp(“表达式”,”附加参数”); 其中“表达式”与“附加参数”的含义与上面那种定义方式中的含义相同。 例子: var reg=new RegExp(“a*b”); var reg=new RegExp(“abc+f”,”g”); 4)普通方式与构造函数方式的区别 普通方式中的表达式必须是一个常量字符串,而构造函数中的表达式可以是常量字符串,也可以是一个js变量,例如根据用户的输入来作为表达式参数等等: var reg=new RegExp(document.forms[0].exprfiled.value,”g”);

正则表达式经典教程

正则表达式是常见常忘,所以还是记下来比较保险,于是就有了这篇笔记。 希望对大家会有所帮助。J 1.什么是正则表达式 简单的说,正则表达式是一种可以用于文字模式匹配和替换的强有力的工具。是由一系列普通字符和特殊字符组成的能明确描述文本字符串的文字匹配模式。 正则表达式并非一门专用语言,但也可以看作是一种语言,它可以让用户通过使用一系列普通字符和特殊字符构建能明确描述文本字符串的匹配模式。除了简单描述这些模式之外,正则表达式解释引擎通常可用于遍历匹配,并使用模式作为分隔符来将字符串解析为子字符串,或以智能方式替换文本或重新设置文本格式。正则表达式为解决与文本处理有关的许多常见任务提供了有效而简捷的方式。 正则表达式具有两种标准: ·基本的正则表达式(BRE – Basic Regular Expressions) ·扩展的正则表达式(ERE – Extended Regular Expressions)。 ERE包括BRE功能和另外其它的概念。 正则表达式目前有两种解释引擎: ·基于字符驱动(text-directed engine) ·基于正则表达式驱动(regex-directed engine) Jeffery Friedl把它们称作DFA和NFA解释引擎。 约定: 为了描述起来方便,在本文中做一些约定: 1. 本文所举例的所有表达时都是基于NFA解释引擎的。 2. 正则表达式,也就是匹配模式,会简写为Regex。 3. Regex的匹配目标,也就是目标字符串,会简写为String。 4. 匹配结果用会用黄色底色标识。 5. 用1\+1=2 括起来的表示这是一个regex。 6. 举例会用以下格式: Regex Target String Description test This is a test 会匹配test,testcase等 2.正则表达式的起源正则表达式的?祖先?可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为?神经网事件的表示法?的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为?正则集的代数?的表达式,因此采用?正则表达式?这个术语。

正则表达式语法完整版

正则表达式基础知识 一个正则表达式就是由普通字符(例如字符a 到z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。如:

下面看几个例子: "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;"notice":表示任何包含"notice"的字符串。 '*','+'和'?'这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或更多”,“一次或更多”还有“没有或一次”。下面是几个例子: "ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);"ab+":表示一个字符串有一个a后面跟着至少一个b或者更多; "ab?":表示一个字符串有一个a后面跟着零个或者一个b; "a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。 也可以使用范围,用大括号括起,用以表示重复次数的范围。 "ab{2}":表示一个字符串有一个a跟着2个b("abb"); "ab{2,}":表示一个字符串有一个a跟着至少2个b; "ab{3,5}":表示一个字符串有一个a跟着3到5个b。

请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。 还有,你可能注意到了,'*','+'和'?'相当于"{0,}","{1,}"和"{0,1}"。 还有一个'|',表示“或”操作: "hi|hello":表示一个字符串里有"hi"或者"hello"; "(b|cd)ef":表示"bef"或"cdef"; "(a|b)*c":表示一串"a""b"混合的字符串后面跟一个"c"; '.'可以替代任何字符: "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字; "^.{3}$":表示有任意三个字符的字符串(长度为3个字符); 方括号表示某些字符允许在一个字符串中的某一特定位置出现: "[ab]":表示一个字符串有一个"a"或"b"(相当于"a|b"); "[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a|b|c|d"或者"[abcd]");"^[a-zA-Z]":表示一个以字母开头的字符串; "[0-9]%":表示一个百分号前有一位的数字; "[0-9]+":表示一个以上的数字; ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。 你也可以在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表 示两个百分号中不应该出现字母)。 为了逐字表达,必须在"^.$()|*+?{\"这些字符前加上转移字符'\'。 请注意在方括号中,不需要转义字符。

相关报文格式

装箱单报文(货代-EDI) 相比普通装箱单报文,EDI发送给码头的智能闸口装箱单报文主要多了“装箱单编号”字段,报文格式定义如下:

注: 温度中,除正(+)负(-)号及小数点外,最多只能三位数字. 注: 危险货物闪点中,除正(+)负(-)号及小数点外,最多只能三位数字.

记录结构: 00 头记录M1 01 其他接收方C1 10 船舶信息M1 11 装卸港信息M1 50 集装箱信息M1 51 提单号信息M999 52 货物信息M1 53 货物描述M1 54 唛头M1 55 危险品信息C1 56 箱号信息M1 99 尾记录M1 备注:其中,11 卸货港填写该箱在本航次中的实际下船港口,中转港默认和卸货港保持一致;52 体积/件数/重量是指本提单在该箱中的件体积/件数/重量;56 体积/件数/重量是也指本提单在该箱中的件体积/件数/重量。 报文例子: 00:COSTCO:CONTAINER LOAD PLAN:9:SENDER:NPEDI:200902110739:::' 10:UN9293806:ITAL CONTESSA:0502W E:LTP::Y:DE' 11:FRLEH::CNNGB::FRLEH:::' 50:MSKU7299054:22GP:L:O:200902110737:6080843:MSK:::::::SENDER-0000000000:CP H:W:AAA::' 51:559890777-A' 52:1:72:CT::2038:15::::' 53:17' 54:N/M' 56:MSKU7299054:72:2300:2038:15' 51:559890777-B' 52:1:25:CT::530:2::::'

正则表达式入门

/b 代表着单词的开头或结尾,也就是单词的分界处.如果要精确地查找hi这个单词的话,我们应该使用/bhi/b. .是另一个元字符,匹配除了换行符以外的任意字符,*同样是元字符,它指定*前边的内容可以重复任意次以使整个表达式得到匹配。 .*连在一起就意味着任意数量的不包含换行的字符。 /d是一个新的元字符,匹配任意的数字,0/d/d‐/d/d/d/d/d/d/d/d也就是中国的电话号码.为了避免那么多烦人的重复,我们也可以这样写这个表达式:0/d{2}‐/d{8}。 /s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。/w匹配字母或数字或下划线或汉字。 /b/w{6}/b 匹配刚好6个字母/数字的单词。 字符转义:使用/来取消这些字符的特殊意义。因此,你应该使用/.和/*。当然,要查找/本身,你也得用//。 代码 说明 . 匹配除换行符以外的任意字符 /w 匹配字母或数字或下划线或汉字 /s 匹配任意的空白符 /d 匹配数字 /b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 重复: 常用的限定符 代码/语法 说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 要想查找数字,字母或数字,你只需要在中括号里列出它们就行了,像[aeiou]就匹配任何一个元音字母,[.?!]匹配标点符号(.或?或!)

常用的反义代码 代码/语法 说明 /W 匹配任意不是字母,数字,下划线,汉字的字符 /S 匹配任意不是空白符的字符 /D 匹配任意非数字的字符 /B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符 [^aeiou] 匹配除了aeiou这几个字母以外的任意字符 替换: 正则表达式里的替换指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。 0/d{2}‐/d{8}|0/d{3}‐/d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010‐12345678),一种是4位区号,7位本地号(0376‐2233445)。 /(0/d{2}/)[‐ ]?/d{8}|0/d{2}[‐ ]?/d{8}这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔。你可以试试用替换|把这个表达式扩展成也支持4位区号的。 /d{5}‐/d{4}|/d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题:使用替换时,顺序是很重要的。如果你把它改成/d{5}|/d{5}‐/d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配替换时,将会从左到右地测试每个分枝条件,如果满足了某个分枝的话,就不会去管其它的替换条件了。 分组: 如果想要重复一个字符串又该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了。 (/d{1,3}/.){3}/d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:/d{1,3}匹配1到3位的数字,(/d{1,3}/.}{3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(/d{1,3})。不幸的是,它也将匹配256.300.888.999这种不可能存在的IP地址(IP地址中每个数字都不能大于255)。如果能使用算术比较的话,或许能简单地解决这个问题,但是正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组,选择,字符类来描述一个正确的IP地址:((2[0‐4]/d|25[0‐5]|[01]?/d/d?)/.){3}(2[0‐4]/d|25[0‐5]|[01]?/d/d?)。 后向引用: 后向引用用于重复搜索前面某个分组匹配的文本。例如,/1代表分组1匹配的文本。难以理解?请看示例: /b(/w+)/b/s+/1/b可以用来匹配重复的单词,像go go, kitty kitty。首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(/b(/w+)/b),然后是1个或几个空白符(/s+,最后是前面匹配的那个单词(/1)。

常用正则表达式

1.平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 2."^\d+$" //非负整数(正整数 + 0) 3."^[0-9]*[1-9][0-9]*$" //正整数 4."^((-\d+)|(0+))$" //非正整数(负整数 + 0) 5."^-[0-9]*[1-9][0-9]*$" //负整数 6."^-?\d+$" //整数 7."^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0) 8."^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数 9."^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0) 10."^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数 11."^(-?\d+)(\.\d+)?$" //浮点数 12."^[A-Za-z]+$" //由26个英文字母组成的字符串 13."^[A-Z]+$" //由26个英文字母的大写组成的字符串 14."^[a-z]+$" //由26个英文字母的小写组成的字符串 15."^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串 16."^\w+$" //由数字、26个英文字母或者下划线组成的字符串 17."^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址 18."^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url 19./^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年- 月-日 20./^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/ 年 21."^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1, 3})(]?)$" //Emil 22./^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ / /电话号码

JAVA中正则表达式使用介绍

JAVA中正则表达式使用介绍 一、什么是正则表达式 正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。 正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,进行信息的验证。 此外,它还能够高效地创建、比较和修改字符串,以及迅速地分析大量文本和数据以搜索、移除和替换文本。 例如: 二、基础知识 1.1开始、结束符号(它们同时也属于定位符) 我们先从简单的开始。假设你要写一个正则表达式规则,你会用到^和$符号,他们分别是行首符、行尾符。 例如:/^\d+[0-9]?\d+$/ 1.2句点符号 假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符——句点符号“.”。这样,完整的表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格、Tab字符甚至换行符: 1.3方括号符号 为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符: 1.4“或”符号

常见报文格式帧结构

常见报文格式汇总 1.1Ethernet数据包格式(RFC894) 1、目的Mac的最高字节的第8位如果为1,表明此包是以太网组播/广播包,送给CPU处理。 2、将目的Mac和本端口的MAC进行比较,如果不一致就丢弃。 3、获取以太网类型字段Type/Length。 0x0800→IP 继续进行3层的IP包处理。 0x0806→ARP 送给CPU处理。 0x8035→RARP 送给CPU处理。 0x8863→PPPoE discovery stage 送给CPU处理。 0x8864→PPPoE session stage 继续进行PPP的2层包处理。 0x8100→VLAN 其它值当作未识别包类型而丢弃。 4、Tag帧。 Type:长度为2字节,取值为0x8100,表示此帧的类型为802.1Q Tag帧。 PRI:长度为3比特,可取0~7之间的值,表示帧的优先级,值越大优先级越高。该优先级主要为QoS差分服务提供参考依据(COS)。 VID(Vlan ID):长度12bits,可配置的VLAN ID取值范围为1~4094。通常vlan 0和vlan 4095预留,vlan1为缺省vlan,一般用于网管。 1.2PPP数据包格式 1、获取PPP包类型字段。 0x0021→IP 继续进行3层的IP包处理。 0x8021→IPCP 送给CPU处理。 0xC021→LCP 送给CPU处理。 0xc023→PAP 送给CPU处理。 0xc025→LQR 送给CPU处理。 0xc223→CHAP 送给CPU处理。 0x8023→OSICP 送给CPU处理。 0x0023→OSI 送给CPU处理。 其它值当作未识别包类型而丢弃。

相关文档