当前位置:文档之家› Linux Regex 正则表达式学习

Linux Regex 正则表达式学习

ragel学习

Ragel学习笔记 解决的问题 采用一个连续的可能庞大的正则表达式,可以有一些分块式action,或者只是判断某一串符合此表达式。采用解决问题模型为有限状态机。 语法 嵌入C, C++, Objective-C, D, Go,Java and Ruby. 多行代码 %%{ … … }%% 单行代码%% 实例代码 #include #include %%{ machine foo; main := ( 'foo' | 'bar' ) 0 @{ res = 1; }; }%% %% write data; int main( int argc, char **argv ) { int cs, res = 0; if ( argc > 1 ) { char *p = argv[1]; char *pe = p + strlen(p) + 1; %% write init; %% write exec; } printf("result = %i\n", res ); return 0; }

状态机名 machine fsm_name; 必须在块开头注明,如上例。如果没注明则用先前使用的,如没有则报错。可以采用多文件编译include为关键字导入文件。 定义语句 = ; 名为name的state直到定义实例化(被引用时(下一个为:=形式))才生成,该语句类似一个类的定义 状态机实例化 := ; 该语句产生状态机的一个状态,名为main的状态为初始start状态。 %% write init // 该命令设置cs (current_state) 为main的状态,即为start状态 如果没有main 则最近一个实例化的状态即为开始状态。 在外部执行控制语句可以通过设置cs来设置状态机,内部执行,采用fcall fgoto fnext实现状态切换。 导入ragel代码 include FsmName "inputfile.rl"; 如果没名会与当前状态机同名,如果没输入文件,则导入FsmName,检索路径与当前文件相同,可以通过-I命令增加include 检索路径,同makefile。 导入定义 import "inputfile.h"; 文件内容形如:(单引号类似命令标记)定义name 为number(纯数字) 或者lit_string(字符串) name '=' number name '=' lit_string 'define' name number 'define' name lit_string 如果输入文件为一个ragel 程序则忽略所有tokens,检索路径与当前文件相同,可以通过-I 命令增加import检索路径,同include。

编写正则表达式的常用符号

正则表达式中常用符号 符号含义举例或说明 .任何字符或非字符 2.4匹配204, 214, 2t4, 2 4, 2.4, 2-4 *重复0次或更多BA*匹配B,BA,BAA,BAAA等 .* 某个字符重复0次或更多R.* 表示R后面有0个过多个字符,不同类副词 的赋码包括RR,RG,PGQ,RGQV等, 所以R.*表示, 不分类笼统地指所有副词, 类似的所有名词 N.*,所有形容词J.* +重复1次或多次A+匹配A,AA,AAA等 ?有或者无BA?匹配B和BA .*?任何字符串 |或者(|号在回车键上面)(analyze|analyse) 检索analyse 或者 analyze [ ] 方括号中的任意字符或单词[abc]匹配a、b或c [abc]+匹配 [ ]* n个单词。 () 组合,使得括号中的部分可以当作 一个符号处理 act(ing)可以匹配act和acting (cat|dog),把dog 和cat 两个词一块检索出来, ([pos="R.*"][pos="J.*"]) 前面一个词的词性为副词, 后面一个词的词性为形容词,把副词和形容词作 为一个整体检索 {} { }表示选择范围,{0,3}表示0~3个 范围内[pos="J.*"]{0,2} 表示其前的形容词有0个,1个或者2个 [ ] {0,}中,[ ]表示任意单词,{0,2}表示这个单词有0个,1个,或者无穷个,后面一个数字不写表示无穷个。 & 和,并且

段首标记, “however|However”表示句首为However或 however 开头的句子 !不等于[word!=","] "which"表示which 前没有逗号 [pos!="JJ.*|N.*|I.*"] 词性不是形容词、名词、介词 的词 N.*名词、V.* 动词、J.*形容词、R.* 副词、AT.* 冠词、I.* 介词、P.*代词 VB.*表示be动词、VH*有动词、VV.*实意动词及其各种变形、VM*情态动词

正则表达式常用发发总结

//判断输入内容是否为空 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 expression)就是用一个“表达式”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如表达式“ab+” 描述的特征是“一个 'a' 和任意个'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。 正则表达式可以用来:(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。(3)用来替换,比普通的替换更强大。 正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首先要理解的。 文章中的每一个举例,都可以点击进入到测试页面进行测试。闲话少说,开始。 1. 正则表达式规则 1.1 普通字符 字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。 举例1:表达式 "c",在匹配字符串 "abcde" 时,匹配结果是:成功;匹配到的内容是:"c";匹配到的位置是:开始于2,结束于3。(注:下标从0开始还是从1开始,因当前编程语言的不同而可能不同) 举例2:表达式 "bcd",在匹配字符串 "abcde" 时,匹配结果是:成功;匹配到的内容是:"bcd";匹配到的位置是:开始于1,结束于4。 1.2 简单的转义字符 一些不便书写的字符,采用在前面加 "\" 的方法。这些字符其实我们都已经熟知了。

正则表达式教程

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

《易语言“正则表达式”详细教程》

《易语言“正则表达式”教程》 本文改编自多个文档,因此如有雷同,不是巧合。 “正则表达式”的应用范围越来越广,有了这个强大的工具,我们可以做很多事情,如搜索一句话中某个特定的数据,屏蔽掉一些非法贴子的发言,网页中匹配特定数据,代码编辑框中字符的高亮等等,这都可以用正则表达式来完成。 本书分为四个部分。 第一部分介绍了易语言的正则表达式支持库,在这里,大家可以了解第一个正则表达式的易语言程序写法,以及一个通用的小工具的制作。 第二部分介绍了正则表达式的基本语法,大家可以用上述的小工具进行试验。 第三部分介绍了用易语言写的正则表达式工具的使用方法。这些工具是由易语言用户提供的,有的工具还带有易语言源码。他们是:monkeycz、零点飞越、寻梦。 第四部分介绍了正则表达式的高级技巧。 目录 《易语言“正则表达式”教程》 (1) 目录 (1) 第一章易语言正则表达式入门 (3) 一.与DOS下的通配符类似 (3) 二.初步了解正则表达式的规定 (3) 三.一个速查列表 (4) 四.正则表达式支持库的命令 (5) 4.1第1个正则表达式程序 (5) 4.2第2个正则表达式例程 (7) 4.3第3个例程 (8) 4.4一个小型的正则工具 (9) 第二章揭开正则表达式的神秘面纱 (11) 引言 (12) 一.正则表达式规则 (12) 1.1普通字符 (12) 1.2简单的转义字符 (13) 1.3能够与“多种字符”匹配的表达式 (14) 1.4自定义能够匹配“多种字符”的表达式 (16) 1.5修饰匹配次数的特殊符号 (17) 1.6其他一些代表抽象意义的特殊符号 (20) 二.正则表达式中的一些高级规则 (21) 2.1匹配次数中的贪婪与非贪婪 (21)

labview的正则表达式语法 来自labview的帮助

Special Characters for Match Regular Expression(正则表达式) and Search and Replace String Use these special characters in the regular expression input of the Match Regular Expression and Search and Replace String functions. Right-click the Search and Replace String function and select Regular Expression from the shortcut menu to configure the function for advanced regular expression searches and partial match substitution in the replacement string. Resize the Match Regular Expression function to view any partial matches found in the string. You can use the Match Pattern function or the Match Regular Expression function to search strings for regular expressions. The Match Regular Expression function gives you more options for matching strings but performs more slowly than the Match Pattern function. Note The Match Regular Expression function does not support null characters in strings. Also, a pattern can return a successful match of an empty string. If a pattern does not return a successful match, the offset past match will return –1. Regular expression support is provided by the PCRE library package. The license under which the PCRE library package is redistributed can be found on the Copyright page at Important Information?Copyright on the Contents tab. Refer to the PCRE Web site at https://www.doczj.com/doc/355966626.html, for more information about Perl Compatible Regular Expressions. Special Character Interpreted As . Matches any single character except a newline character. For example, .t matches at, bt, 2t, _t, and so on. * Marks part of a pattern as one that can appear zero or more times in the input. For example, be* marks e as a pattern that can appear 0 or more times. Therefore, be* matches be in believe, bee in beep, and b in bat. In the last example, the e* did not match a character, but the whole match still succeeded. This can be a problem if the whole pattern is marked with an asterisk. For example, the pattern b* matches b in baac. The pattern b*, however, also matches an empty string or abbc, returning a successful match with whole match returning an empty string. + Marks part of a pattern as one that can appear one or more times in the input. For example, be+ matches be in believe, bee in beep, and fails (no match) with bat. ? Marks part of a pattern as one that can appear zero or one time in the input. For example, be? matches be in believe, be in bee, be in beep, and b in bat. { } Marks a part of a pattern as one that can appear an arbitrary number of times in a specific range. For example, be{2} matches b followed by at least two e characters. be{0,3} matches b followed by at most three e characters. be{2,3} matches b followed by at least two, but at most three e characters. [] Creates character classes, which allow you to match any one of a set of characters. For example, [abc123] matches the characters a, b, c, 1, 2, or 3.

RegexBuddy工具的使用教程

RegexBuddy工具的使用教程(图文)1 2009-10-14 12:14 一、什么是RegexBuddy 使用了几天,个人感觉RegexBuddy 是学习正则表达式时的比较好的帮手。它可以容易地建立你想要的正确的正则表达式。清晰地推断他人所写的复杂的正则表达式。它还可以用给出的实例字符串或文件快速地进行测试匹配,从而防止了在实际应用中出现错误。RegexBuddy会在你的源代码中根据你所应用的特殊编程语言,自动生成带有正则表达式的代码段。同时你也可以收集正则表达式到库中,以在未来重新使用。 二、获得RegexBuddy 目前最新的版本是3.2.1(图2-1),于2008年12月9日发布的。可以在https://www.doczj.com/doc/355966626.html,/(RegexBuddy的官网)进行最新版本的下载和正版的购买。 图2-1 RegexBuddy的3.2.1版 三、初步认识RegexBuddy 安装比较简单(略过) 首先,我们先对RegexBuddyg 产生一个整体的初步的认识,而不是设法解释所有的东西。RegexBuddyg是相当易懂的容易的,所以我想经过简单大家应该能够基本正确地使用它。

默认情况下,RegexBuddy会在顶部显示正则表达式和上一次使用的历史,如图 2-1。 图3-1 RegexBuddy的顶部 底部会显示7个选项卡,分别是“Create”、“Test”、“Debug”、“Use”、“Library”、“GREP”、“Forum”(需要注册才能使用此功能),如图2-2。 图3-2 RegexBuddy的底部 如果你的显示器较大,也可以分成两块平铺,你可以单击窗口最右上方工具栏上的“View”按键,在菜单中选择“Side by Side Layout”,这样你可以最大限度的同时查看两个窗口(图3-4)。

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]匹配

正则表达式教程

正则表达式教程 早期起源 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。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 尽管这种搜索文件的方法肯定很有用,但也十分有限。? 和* 通配符的有限能

[VIP专享]经典正则表达式QRegExp的解析

QRegExp正则表达式 2010-03-20 17:00 "^\d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\d+)|(0+))$" //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$" //负整数 "^-?\d+$" //整数 "^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0) "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数 "^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0) "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0- 9]*[1-9][0-9]*)))$" //负浮点数 "^(-?\d+)(\.\d+)?$" //浮点数 "^[A-Za-z]+$" //由26个英文字母组成的字符串 "^[A-Z]+$" //由26个英文字母的大写组成的字符串 "^[a-z]+$" //由26个英文字母的小写组成的字符串 "^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串 "^\w+$" //由数字、26个英文字母或者下划线组成的字符串 "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url "^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$" // 年-月-日 "^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$" // 月/日/年 "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Email "(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //电话号码 "^(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地址 ^([0-9A-F]{2})(-[0-9A-F]{2}){5}$ //MAC地址的正则表达式 ^[-+]?\d+(\.\d+)?$ //值类型正则表达式 QRegExp是Qt的正则表达式类. Qt中有两个不同类的正则表达式. 第一类为元字符.它表示一个或多个常量表达式. 令一类为转义字符,它代表一个特殊字符. 一.元字符 . 匹配任意单个字符.例如, 1.3 可能是1. 后面跟任意字符,再跟3

GAE入门教程

GAE入门教程 1.简介 介绍什么是Google App Engine 2.开发环境 如何下载并安装SDK包,如何配置调试环境 3.Hello World 开始编写Hello world程序,帮助你初步了解Google App Engine程序的编写 4.使用webapp framework 学习使用Web框架来编写Web应用 5.用户系统服务 学习如何判断Google用户登录,获取Goolge登录后的用户信息 6.处理表单数据 处理Form表单,学习Post和Get用法 7.数据存储 学习Google 数据模型以及查询语法GQL 8.使用模版文件 学习使用模板文件来显示网页,让数据和页面分离,加快网站开发速度 9.使用静态文件 学习如何处理CSS,JS,图片等静态文件 10.上传应用程序 发布你已经完成的Web应用到Google服务器上

Google App Engine入门:简介 (本文译自:Google App Engine Getting Started) 欢迎使用Google App Engine! 创建一个Google App Engine应用非常简便,只需要花费你几分钟时间. 你可以很方便的创建你的网站应用:直接上传并分享,不需要进行任何的修改和注释。 在这个指导里,我们将创建一个简单的留言本,让用户可以发表留言。并且支持匿名和Google帐号两种方式发表留言。 这个留言本程序将演示如何使用Google的数据存储,集成Google账户系统,如何使用一个简单的Python Web framework来调试GAE网站。并且还将演示如何使用Django的模版引擎。 接下来... 为了开始编写你的Google App Engine应用程序,你必须先下载Google App Engine软件开发环境。 下一章:Google App Engine软件开发环境.

语法词法生成器

语法词法生成器 一、语法词法生成器Flex 语法扫描器生成器 flex (fast lexical analyser generator) 是Lex的另一个替代品。它经常和自由软件Bison语法分析器生成器一起使用。Flex 最初由Vern Paxson 于1987 年用C语言写成。语法分析生成器JavaCC JavaCC(Java Compiler Compiler) 是一个用JA V A开发的最受欢迎的语法分析生成器。这个分析生成器工具可以读取上下文无关且有着特殊意义的语法并把它转换成可以识别且匹 配该语法的JA VA程序。它还提供JJTree等工具来...语法分析器生成工具YACC 这是一个经典的生成语法分析器的工具,大学的《编译原理》课程里介绍过。词法分析工具ANTLR ANTLR(ANother Tool for Language Recognition)它是Java开发的词法分析工具,它可以接受词文法语言描述,并能产生识别这些语言的语句的程序。作为翻译程序的一部分,你可以使用简单的操作符和动作来参数化你的文法...解析器生成器

Bison GNU bison是一个自由软件,用于自动生成语法分析器程序,实际上可用于所有常见的操作系统。Bison把LALR形式的上下文无关文法描述转换为可做语法分析的C或C++程序。在新近版本中,Bison增加了对GLR语法分析算法的支...词法分析器生成工具Lex 这是一个经典的生成词法分析器的工具语法分析器生成工 具Berkeley Yacc Berkeley Yacc (byacc) 是一个高质量的yacc 变种,其目的是为了避免依赖某个特定的编译器。语法分析生成器JFlex JFlex是一个Java的词法/语法分析生成器。JavaScript解析器Jison JavaScript解析器,Coffee就是使用Jison解析的。Jison 将一个上下文无关语法作为输入,输出对应的JavaScript代码,类似Yacc。词法/语法分析框架chrysanthemum chrysanthemum (中文名“菊花”)是一个由C++写成的小巧

正则表达式之道

正则表达式之道 原著:Steve Mansour sman@https://www.doczj.com/doc/355966626.html, Revised: June 5, 1999 (copied by jm /at/ https://www.doczj.com/doc/355966626.html, from https://www.doczj.com/doc/355966626.html,/%7esman/regexp.htm, after the original disappeared! ) 目录 什么是正则表达式 范例 简单 中级(神奇的咒语) 困难(不可思议的象形文字) 不同工具中的正则表达式 什么是正则表达式 一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸,这篇文章也不能够改变这一点,不过,经过一点点练习之后我就开始觉得这些复杂的表达式其实写起来还是相当简单的,而且,一旦你弄懂它们,你就能把数小时辛苦而且易错的文本处理工作压缩在几分钟(甚至几秒钟)内完成。正则表达式被各种文本编辑软件、类库(例如Rogue Wave的tools.h++)、脚本工具(像awk/grep/sed)广泛的支持,而且像Microsoft的Visual C++这种交互式IDE也开始支持它了。 我们将在如下的章节中利用一些例子来解释正则表达式的用法,绝大部分的例子是基于vi中的文本替换命令和grep文件搜索命令来书写的,不过它们都是比较典型的例子,其中的概念可以在sed、awk、perl和其他支持正则表达式的编程语言中使用。你可以看看不同工具中的正则表达式这一节,其中有一些在别的工具中使用正则表达式的例子。还有一个关于vi中文本替换命令(s)的简单说明附在文后供参考。 正则表达式基础 正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。 在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,,它可以匹配"testing"和"123testing"等字符串,但是不能匹配"Testing"。 要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。 元字符描述 .匹配任何单个字符。例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不匹配root。 $匹配行结束符。例如正则表达式weasel$能够匹配字符串"He's a weasel"的末尾,但是

正则表达式经典教程

正则表达式是常见常忘,所以还是记下来比较保险,于是就有了这篇笔记。 希望对大家会有所帮助。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 早期工作的基础上,发表了一篇标题为?神经网事件的表示法?的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为?正则集的代数?的表达式,因此采用?正则表达式?这个术语。

VBA正则表达式

EXCEL本身的替换功能已经带有部分,word的更牛,但也未达到正则表达式的精华部分那种功能。摘录部分内容共享:来自Henry Spencer 1. 概述 正则表达式原本是形式语言理论中的概念,与编译器的构造有密切的联系。但是作为一个应用软件的用户,我们没有必要去细究正则表达式的严格定义和处理方法。本文将从实用的角度出发,阐述引入正则表达式的目的、正则表达式的命令格式,以及如何利用正则表达式完成一些实际的文本处理工作。 我们在处理文本时,经常会遇到一些具有某种特定格式,或者说满足某种规则的文本。比如,一个无符号的整数由一连串的数字构成,而一个Email地址的格式则是“用户名@主机名”,其中用户名是一串字母或数字,主机名则是由若干个由“.”分隔的字母数字串。正则表达式就是用来指定这种规则的。如果某个字符串满足正则表达式指定的规则,则称该字符串为正则表达式的一个“匹配串”。 2. 正则表达式的构成 为了方便理解,让我们先来看看大家比较熟悉的数学表达式,“(x+3)*2+y”是一个典型的数学表达式。一个数学表达式由若干个“项”组成,“项”与“项”之间用加号或减号相连;这里“(x+3)*2”和“y”分别是两个项。每个项又由若干个“因子”组成,因子之间用乘号或除号相连;这里第一个项有两个因子“(x+3)”和“2”,而第二个项只有一个因子“y”。每个因子可以是一个简单的数,一个代数变量,

也可以是放在括号里面的另一个表达式。对于最后一种情况,括号中的表达式称为“子表达式”;这里“x+3”就是一个子表达式。 正则表达式的结构与数学表达式很相似。与数学表达式的“项”相对应,正则表达式由若干个“分支”构成,“分支”之间用符号“|”相连。从逻辑上讲,分支之间是一种“或”的关系,一个字符串只要与正则表达式中的任何一个分支相匹配,这个字符串就与整个正则表达式相匹配。比如,“第三人称代词”可以用正则表达式表示为“他|她|它|他们|她们|它们”。 与数学表达式的“因子”相对应,构成正则表达式“分支”的部件称为“原子”。“原子”与“原子”之间没有任何符号相连。从逻辑上讲,原子之间是串接的关系,一个字符串必须与各个原子依次相匹配,才算与这个分支相匹配。比如在上面的例子中,分支“他们”由两个原子“他”和“们”组成。 正则表达式的本质是它的“原子”可以有多种不同的形式。前面的例子是最简单的情形,即每个原子由一个普通字符组成。除此以外,“原子”还可以是特殊符号、通配符、字符集以及子表达式。 2.1 特殊符号 可以作为特殊符号的原子有: ^ 匹配行首。例如,“^他”匹配出现在行首的“他” 字。值得注意的是,这个符号仅仅表示“行首”这个位置,与它相匹配的字符串长度为0; $ 匹配行末。与“^”相似,它仅表示“行末”这个位置。例如,“。$”匹配出现在行末的句号;

正则表达式的学习资料

正则表达式在处理文本方面用处非常大,最早像在Perl和awk语言中,提供了这种机制,Java在Java2中也增加了正则表达式这个包java.util.regex。这个包为用户使用正则表达式,提供了易用而全面的支持。 我的研究方向是web挖掘。从网页中提取内容,处理文本,当然需要正则表达式这个强大的工具了。 一、首先我们看一下怎么使用正则表达式的一个例子: A Matcher examines the results of applying a pattern. 我们希望从这句话中找到所有开头为a的单词。 当然这只是一个简单的例子,你可以使用String提供的split方法,得到单词数组,然后遍历各个单词看是否是否开头为a 我们现在看看怎么使用正则表达式来处理这个问题: import java.util.regex.*; public class FindA{ public static void main(String args[]) throws Exception{ String candidate="A Matcher examines the results of applying a pattern."; String regex="\\ba\\w*\\b"; Pattern p=https://www.doczj.com/doc/355966626.html,pile(regex); Matcher m=p.matcher(candidate); String val=null; System.out.println("INPUT:"+candidate); System.out.println("REGEX:"+regex+"\r\n"); while(m.find()){ val=m.group(); System.out.println("MATCH:"+val); } if(val==null){ System.out.println("NO MATCHES:"); } } }

07-Excel VBA 学习总结 - 数据验证与正则表达式

Excel VBA 学习总结- 数据验证与正则表达式 数据结构有云:程序=数据+操作。从中可以看出,数据才是程序的核心对象,每个程序所有的操作和意图都是围绕数据展开的。每个程序的结构基本都分为三个部分:输入,处理,输出。输入是接收用户的数据,处理过程是通过不同的算法处理接收的数据,输出是将处理的结果返回给用户。 一、输入与输出 大家还记得在VBA我们一般通过什么方式接受用户的简单输入呢?没错,最简单的方式就是Msgbox与InputBox。 Msgbox:最简单的用户输入框 Msgbox太简单了,以至于大家用的最多的就是其显示信息的功能,其实它是有返回值的。它的语法如下所示: MsgBox(Prompt[,Buttons][,Title][,Helpfile,Context]) As Integer 这里用户的输入就是他选择的按钮,也就是Integer值所代表的选项。这里用户的选择比较简单,所以不用验证。 InputBox:最简单的全能型用户输入框 VBA内置的InputBox方法 这个函数返回一个字符串,选择取消后返回空串(零个字节的字符串)。它不含有容错处理。例如你想要用户输入整数,结果用户输入了字符,这个时候InputBox并不会替你告诉用户错误的原因。 Application的InputBox函数 这个函数更强大,内置容错处理,选择取消后返回false。这个函数可以指定输入的类型,当用户输入的数据类型与参数中指定的类型不兼容的时候,这个函数会给出温馨的提示,告诉你输入的数据类型不对。 除了这两种最简单的输入方式外,还有其它一些重要的输入方式: 单元格输入:这种方式是最常见的,用户在单元格中输入数据,然后程序获取单元格中数据并处理。 用户窗口输入:这种方式最直观,比较适合处理结构化数据;利用窗口,我们可以提供专业的用户视觉体验和便利的用户输入体验。 文件输入:这种方式适合导入大量的数据或其它来源的数据。 说完了输入,再说说输出。VBA中输出也有相对应的几种方式: Msgbox:最简单的输出信息方式。

相关主题
文本预览
相关文档 最新文档