当前位置:文档之家› Sigil正则表达式入门

Sigil正则表达式入门

Sigil正则表达式入门
Sigil正则表达式入门

实用标准文档
Sigil 正则表达式入门 正则表达式,是一种用特殊符号表示文字的方法,主要用在查找和替换方面。 下面的例子可以让你知道正则表达式是干什么用的。 在一个文本中,有这样的一些内容:
序章 第一章 ABCDEF 第二章 GHIJKL 第三章 ………… 终章
这种内容我们都很熟悉,你有没有想过,用什么办法可以把这些内容一次过 查找出来呢?
为了简化,我们先来看这个部分。
第一章 第二章 第三章
可以看到,这些内容有着极高的相似性,由“第”,“章”开头和结尾,中 间有着一些数字。如果我们能用一个什么符号来代表中间的所有字,比如一个圆 点“.”,不就可以用这样的方式来查找出所有这样的内容了吗。
第.章
很早之前,就有人发明了一套完整的方案,让我们可以用各种不同的符号来 达到这种目的,那就是我们将要了解的正则表达式。
正则表达式作为一种描述字符的方案,在大量软件、编程语言中都有所运用, 而在这些不同的平台上,正则表达式的使用方式又往往会有或多或少的差异,在 某个平台上管用的表达式,换个地方可能就要改改才能正确运行。那么在这篇文 章里,我们主要是讲 Sigil 中的正则表达式,至于推广应用,就要靠大家去查找 资料了。
1. 元字符
我们前面提到,正则表达式一个重要作用就是用特别的符号来代表一类字符, 而这些符号就叫做“元字符”。这些元字符在大多数环境下都是通用的。
注意,元字符中所有符号都是半角符号,也就是通常说的英文符号。
文案大全

实用标准文档
以下是一些常见的元字符,实际上还有更多。这些元字符都经过测试,在 Sigil 下有效。 符号 意义 说明
任意
.
一个
最简单的元字符,匹配任意字符,但不包括换行符“\n”。
字符
把元字符改变为普通字符,或者把某些普通字符转变为元
\
转义 字符。
比如,“\.”就是代表普通的点号,不代表其他字符。
半角空格、制表符等空白字符。在 Sigil 中还能匹配到换
\s
空白 字符
行符“\n”和空白行,使用要注意。
注意,不能匹配到全角空格。
\t
制表 符
匹配制表符。
表示文章的换行,这是一个不可见符号,在例子中,这个 符号在“_”的位置。
\n
换行 符
aaa\n bbb
你能够通过“\n”找到换行符,但不能够插入换行符。要 在替换结果中换行,需要用“\r”。
代表一个回车符。这个符号不会在文本中出现,因此不能 查找到。
\r
回车
但是如果你需要在查找结果中插入一个换行,那么就要用
“\r”。
注意,插入后在文本中出现的仍然会是“\n”而不是“\r”。
任意
一个
\d
阿拉
伯数

任意
\D
一个 非阿
拉伯
也就是可以代表 0~9 中的任意一个。 0~9 以外的字符,同样的,不包括换行符“\n”
文案大全

实用标准文档
数字
即一行的开头。Sigil 中不能单独使用,要配合其他字符。
比如,“^a”表示在行首的“a”,能匹配到第一行和第三
行的字母“a”。第二行因为行首是空格,因此匹配不到。
^
行首
abc
abc
abc
表示任意一行的结尾,不包括换行符。在 Sigil 中不能单 独使用。
比如,“c$”表示位于行尾的“c”,能够匹配到第一行和
$
行尾 第二行的字母“c”。
abc
abc
abcd
表示一个或更多。必须配用其他字符使用。添加在一个字 符后面,表示一个或更多个该字符。
相当于“{1,}”
+
一或 更多
比如,“a+”表示一个以上的“a”,以下例子都能匹配到。
a
aa
aaa
表示尽可能少。必须配合其他字符使用。
比如,“accccbb”中“a.*b”匹配到“accccbb”,而“a.*?b”
?
尽可 能少 就能只匹配到“accccb”。
※注意:在某些平台的正则表达式中,这一功能很可能由
“-”减号提供。
|

一个逻辑选择符。 “aa|bb”既可以匹配到“aa”也可以匹配到“bb”。 可以用到多个选项中,比如“aa|bb|cc”。 “1|2|3”相当于“[123]”。
*
尽可 能多
即无或更多。相当于“{0,}”
文案大全

实用标准文档
{n,m}
表示匹配项的个数范围。
个数 范围
比如,“a{3}”表示“aaa”,“a{2,4}”表示“aa”或“aaa” 或“aaaa”,“a{1,}”表示一个以上的“a”。
注意,“a{,2}”应该表示两个以下的“a”,但是这种写 法在 Sigil 中无效,要写成“a{0,2}”。
“[]”本身匹配一个字符。
比如,“[abc]”匹配“a”、“b”或“c”。通常不分顺 序,“”和“”一样。
“[]”中用“-”表示范围,“[a-z]”表能匹配到“a”到
[]
包含 “z”全部 26 个字母之一。
比如,“<0-9>”和“\d”是一样的,但是“\d”速度更快。
如果要在“[]”中匹配“-”本身,把“-”写在最前面, 或者把它转义“\-”。
比如“[-0-9]”,就能匹配所有阿拉伯数字和“-”。
“[]”的逆操作。
比如“a[^b]c”,能匹配到第二行,第三行。
abc
[^]
不包 含
adc
afc
注意,因为“[]”中符号是无序的,因此如果要排除字符 串,要用其他方法。
“(abc)”表示把“abc”分为一组。分组后可以配合其他
元字符使用。一个组称为一个捕获组。
()
捕获 组
比如,“(abc)+”就是一个或以上“abc”组合的意思。
捕获组中的内容会被记录并编号,可以通过“\0”“\1”
这种形式来引用。
(?:)
分组 /非 捕获 组
作用上与“()”类似,能把内容分为一组,但“(?:)”仅 有分组功能,不记录匹配内容。也就是说,无法通过“\0”“\1” 等方式引用。
此元字符虽然消耗的资源更少,速度更快,在简单应用中 可能体验不到与“()”的区别。
\0,\1, 反向
配合分组使用,引用一个分组。
文案大全

实用标准文档
\2...
引用
比如,在查找时有分组“(abc)”,那么“\1”就代表“abc”。 有分组“a(bc)(de)f”,那么“\0”代表“abcdef”,“\1” 代表“bc”,“\2”代表“de”。如此类推。
嵌套也是一样的,比如“(abc(def))”,“\1”代表“abcdef”, “\2”代表“def”。
同样地,也能在查找时应用。
比如有字符串“abc111abc”,那么表达式“(abc).*\1” 就能匹配到所有内容。
注:在其他平台中,可能使用的是$0,$1 等表示方法。
(?s)
放在表达式的最前端,使得“.”可以匹配到“\n”,从而 实现跨行匹配。
比如以下例子:



多行 匹配
使用正则表达式“
.*
”一次只能匹配到第一行 或者第三行。
而使用“(?s)
.*
”则能一次性匹配到第一行到 第三行所有内容。
注:这是 Sigil 特有元字符,其他平台有另外的方法实现 该功能。
注 2:此前缀和勾选“DotAll”效果一致。
(?U)
放在表达式的最前端,使得整个正则表达式实现最少匹配。
比如以下例子:
AAA
BBB
CCC

最少 匹配
正则表达式“
.*
”会匹配到整个句子。 而“(?U)
.*
”只会匹配到 “
AAA
BBB
”。
注:这是 Sigil 特有元字符,其他平台有另外的方法实现 该功能。
注 2:此前缀和勾选“Minimal Match”效果一致。
2. 常用正则表达式
文案大全

实用标准文档
在这一部分,我们回来看一些很常用的正则表达式,这些表达式往往是更复 杂表达式的组成部分。 2.1 所有字符
.* 匹配所有内容。“.”代表一个字符,“*”代表任意多个,因此“.*”代表
“所有字符”。比如

.*

表示
标签内的所有内容,可以依次匹配到下列各项
AAACCCC
!!!!AAAAACCCC 啊啊啊啊

但不能跨行,这样是匹配不到的。
AAAAAA

如果要跨行,需要使用“(?s)”。 2.2 空白行
^[ \t ]*$\n 匹配空白行的典型写法。可以匹配无内容的行,只有空格的行,只有制表符
的行或者空格和制表符混合排列的行。[]中包括的分别是空格“ ”,制表符“\t” 和全角空格“ ”。也可以根据需要添加更多的字符。 2.3 行尾空白字符
[ \t ]+$
文案大全

实用标准文档
匹配出现在行尾的空白字符,比如空格。思路和 2.2 一致,使用“$”把搜 查范围限定在结尾,使用了符号“+”确保最少有一个空白字符,否则会查找失 败。
2.4 压缩重复符号
查找
。+
替换

很容易理解,把一个以上的“。”,换成一个“。”,从而达到压缩重复符 号的目的。可以灵活改变,压缩各种重复的字符。配合 2.2 的查找空白行,也能 实现压缩空白行。
3. 应用实例
在这一部分,我们会看一些 Sigil 使用过程中实际会用到的例子,方便各位 了解正则表达式的使用。
3.1 添加标签
你打算为所有的图片添加一个

,并且 class 为 images
原语句

目标语句

使用元字符 . ,* ,\0
查找

替换
\0

解说: 查找以“”结尾的所有句子,这个表达式默认分组为“0”, 因此可以用“\0”来引用。 如果你的文本中图片语句必定是独立一行的,可以直接使用“”后面是否紧跟换行符“\n”来判断图片是否独立 一行,从而实现不同位置图片的匹配。
文案大全

实用标准文档
扩展: 同样的,你可以用这个方法为各种内容很方便的添加标签,如果你常常用到 这样的替换,不要忘记善用 Sigil 的搜索模板功能。
3.2 拼接断行
在一些文本中,会存在断行,我们要把这些断行重新拼接起来。
原文本
床前 明月光, 疑是地上 霜。 举头望 明月, 低头思故乡。
目标文本
床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。
使用元字符 [^],\n
查找
([^,。])$\n
替换
\1
解说 其实所谓的断行,就是在不该换行的地方进行了换行,那么只要分析出不该 换行的特征就可以了。在这个例子中,换行只应该出现在“,”和“。”后面, 因此我们查找前面没有“,”或者“。”的换行,并且将其删除就可以了。 因为使用的正则表达式会匹配到“\n”前面的一个字符,为了不把这个字符 也删除,所以要用“()”把这个字符保护起来。 扩展 实际上我们还可以使用“零宽断言”来达到这个效果,写法是“(?3.3 识别章节标题
这是很常见的一个需求,我们往往要为章节标题添加

之类的标签。通 过 3.1 我们已经了解到如何添加标签,因此这里着重讲解如何识别标题。
文案大全

实用标准文档
原文本
序章 第一章 XXXX 第二章 CCCC 第三章 AAAA 终章 后记
目标文本

序章

第一章 XXXX

第二章 CCCC

第三章 AAAA

终章

后记


使用元字符 . ,* ,(),\1,^,|,{m,n}
查找
^((序章|第.{1,3}章|终章|后记).*)
替换

\1


解说
表达式开始的“^”查找内容必须是每一行的开头,这样才不会匹配到正文 中的“第 N 章”之类的内容。当然,还是无法完全排除匹配到正文的可能性,因 此要注意替换次数,如果次数和章节数目不符,就要留意了。
通过“|”的使用,我们可以在一个表达式中就匹配到所有的内容,要善用 “|”。“第.{1,3}章”是一个保险,最多匹配到“第九十九章”这样的字符串, 在实际使用中,往往只需要写“第.章”。如果是“第 1 章”这样的,就可以用 “第\d 章”来更精准的匹配。
3.5 自动插入内容
原文本

XXXX


目标文本
XXXX

XXXX


使用元字符 . ,* ,(),\1,\2,(?s),\n,\r
查找
(?s)\n(.*

(.*)

)
替换
\2\r\1
文案大全

实用标准文档
解说 通说“()”的捕获群获取所需要的字符串,然后以逆向引用来达到插入内容 的目的。 使用 Sigil 的前置符“(?s)”使得“.*”可以匹配到换行符“\n”,因此表 达式可以匹配到“...

”之间的所有内容。 捕获组 1 保留以外的所有内容,以便稍后恢复,捕获组 2 获取<h1> 中的内容,插入到<title>中去。 这个操作在 Sigil 中比较有用,因为 Sigil 默认是不会填写<title>内容的。<br>文案大全<br><br></p><!--/p10--><!--rset--><h2>正则表达式教程</h2><p>正则表达式 学习要点: 1.什么是正则表达式 2.创建正则表达式 3.获取控制 4.常用的正则 假设用户需要在HTML 表单中填写姓名、地址、出生日期等。那么在将表单提交到服 务器进一步处理前,JavaScript 程序会检查表单以确认用户确实输入了信息并且这些信息是 符合要求的。 一.什么是正则表达式 正则表达式(regular expression)是一个描述字符模式的对象。ECMAScript 的RegExp 类 表示正则表达式,而String 和RegExp 都定义了使用正则表达式进行强大的模式匹配和文本 检索与替换的函数。 正则表达式主要用来验证客户端的输入数据。用户填写完表单单击按钮之后,表单就会 被发送到服务器,在服务器端通常会用PHP、https://www.doczj.com/doc/9613923827.html, 等服务器脚本对其进行进一步处理。 因为客户端验证,可以节约大量的服务器端的系统资源,并且提供更</p><p>好的用户体验。 二.创建正则表达式 创建正则表达式和创建字符串类似,创建正则表达式提供了两种方法,一种是采用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()方法执行成</p><h2>正则表达式常用发发总结</h2><p>//判断输入内容是否为空 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();</p><p>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("对不起,您输入的日期格式不正确!"); //请将“日期”改成你需要验证的属性名称! } } } //判断输入的字符是否为英文字母</p><h2>正则表达式经典手册</h2><p>引言 正则表达式(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 简单的转义字符 一些不便书写的字符,采用在前面加 "\" 的方法。这些字符其实我们都已经熟知了。</p><h2>正则表达式教程</h2><p>正则表达式教程 早期起源 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。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 尽管这种搜索文件的方法肯定很有用,但也十分有限。? 和* 通配符的有限能</p><h2>《易语言“正则表达式”详细教程》</h2><p>《易语言“正则表达式”教程》 本文改编自多个文档,因此如有雷同,不是巧合。 “正则表达式”的应用范围越来越广,有了这个强大的工具,我们可以做很多事情,如搜索一句话中某个特定的数据,屏蔽掉一些非法贴子的发言,网页中匹配特定数据,代码编辑框中字符的高亮等等,这都可以用正则表达式来完成。 本书分为四个部分。 第一部分介绍了易语言的正则表达式支持库,在这里,大家可以了解第一个正则表达式的易语言程序写法,以及一个通用的小工具的制作。 第二部分介绍了正则表达式的基本语法,大家可以用上述的小工具进行试验。 第三部分介绍了用易语言写的正则表达式工具的使用方法。这些工具是由易语言用户提供的,有的工具还带有易语言源码。他们是: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)</p><h2>RegexBuddy工具的使用教程</h2><p>RegexBuddy工具的使用教程(图文)1 2009-10-14 12:14 一、什么是RegexBuddy 使用了几天,个人感觉RegexBuddy 是学习正则表达式时的比较好的帮手。它可以容易地建立你想要的正确的正则表达式。清晰地推断他人所写的复杂的正则表达式。它还可以用给出的实例字符串或文件快速地进行测试匹配,从而防止了在实际应用中出现错误。RegexBuddy会在你的源代码中根据你所应用的特殊编程语言,自动生成带有正则表达式的代码段。同时你也可以收集正则表达式到库中,以在未来重新使用。 二、获得RegexBuddy 目前最新的版本是3.2.1(图2-1),于2008年12月9日发布的。可以在https://www.doczj.com/doc/9613923827.html,/(RegexBuddy的官网)进行最新版本的下载和正版的购买。 图2-1 RegexBuddy的3.2.1版 三、初步认识RegexBuddy 安装比较简单(略过) 首先,我们先对RegexBuddyg 产生一个整体的初步的认识,而不是设法解释所有的东西。RegexBuddyg是相当易懂的容易的,所以我想经过简单大家应该能够基本正确地使用它。</p><p>默认情况下,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)。</p><h2>正则表达式经典教程</h2><p>正则表达式是常见常忘,所以还是记下来比较保险,于是就有了这篇笔记。 希望对大家会有所帮助。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 早期工作的基础上,发表了一篇标题为?神经网事件的表示法?的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为?正则集的代数?的表达式,因此采用?正则表达式?这个术语。</p><h2>[VIP专享]经典正则表达式QRegExp的解析</h2><p>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</p><h2>GAE入门教程</h2><p>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服务器上</p><p>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软件开发环境.</p><h2>语法词法生成器</h2><p>语法词法生成器 一、语法词法生成器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开发的词法分析工具,它可以接受词文法语言描述,并能产生识别这些语言的语句的程序。作为翻译程序的一部分,你可以使用简单的操作符和动作来参数化你的文法...解析器生成器</p><p>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++写成的小巧</p><h2>八爪鱼采集器正则表达式入门教程</h2><p>https://www.doczj.com/doc/9613923827.html, 八爪鱼采集器正则表达式入门教程 正则表达式(Regular Expression),按英文直译是“规范化表达”,其作用是将复杂模糊的源数据通过正则表达式转化为简单直观的目标数据。例如: “150ABCD” “一百五ABCD” “One hundred and fiftyABCD” 分析思考过程: 以上字符串中,我们的源数据数据分别为:““150ABCD”、“一百五ABCD”、“One hundred and fiftyABCD” 假设我们要提取目标数据为:字符串中以数字开头的数据 那么我们约束条件为:只取字符串中以数字开头的源数据 将此约束条件转化为正则表达式为:[0-9](.+)\b 其中,[0-9]的语义为开头1位为0-9开头,中间间隔以通配符“.”代替,(.+)语义为字符串长度不做限定,\b的语义为,匹配一个边界。</p><p>https://www.doczj.com/doc/9613923827.html, 正则后的目标数据:“150ABCD” 通过这个简单例子,我们大致了解到了为什么要用正则与正则所能实现的效果,讲通俗点就是,正则只是将我们的意愿(提取字符串中以数字开头的数据)以表达式的形式展现出来([0-9](.+)\b),并最终通过表达式匹配到所需要的目标数据(“150ABCD”),所以灵活运用正则,可以通过简单的方法实现强大的功能。 为什么要在八爪鱼中使用正则? 在八爪鱼采集数据过程中,受限于网页HTML结构的原因,部分目标数据并不能单独提取出来,这时需要简单的搜索与替换操作来提取与预期搜索结果匹配的确切文本,除此之外,对数据要求精准规范的用户,还能通过正则表达式测试所提取数据字符串的模式、替换文本、基于匹配模式从字符串中提取子字符串等操作。 例如: 匹配字符串内模式: 1.查看字符串是否出现电话号码模式 2.查看字符串是否出现网址URL模式 替换文本:</p><h2>VBA正则表达式</h2><p>EXCEL本身的替换功能已经带有部分,word的更牛,但也未达到正则表达式的精华部分那种功能。摘录部分内容共享:来自Henry Spencer 1. 概述 正则表达式原本是形式语言理论中的概念,与编译器的构造有密切的联系。但是作为一个应用软件的用户,我们没有必要去细究正则表达式的严格定义和处理方法。本文将从实用的角度出发,阐述引入正则表达式的目的、正则表达式的命令格式,以及如何利用正则表达式完成一些实际的文本处理工作。 我们在处理文本时,经常会遇到一些具有某种特定格式,或者说满足某种规则的文本。比如,一个无符号的整数由一连串的数字构成,而一个Email地址的格式则是“用户名@主机名”,其中用户名是一串字母或数字,主机名则是由若干个由“.”分隔的字母数字串。正则表达式就是用来指定这种规则的。如果某个字符串满足正则表达式指定的规则,则称该字符串为正则表达式的一个“匹配串”。 2. 正则表达式的构成 为了方便理解,让我们先来看看大家比较熟悉的数学表达式,“(x+3)*2+y”是一个典型的数学表达式。一个数学表达式由若干个“项”组成,“项”与“项”之间用加号或减号相连;这里“(x+3)*2”和“y”分别是两个项。每个项又由若干个“因子”组成,因子之间用乘号或除号相连;这里第一个项有两个因子“(x+3)”和“2”,而第二个项只有一个因子“y”。每个因子可以是一个简单的数,一个代数变量,</p><p>也可以是放在括号里面的另一个表达式。对于最后一种情况,括号中的表达式称为“子表达式”;这里“x+3”就是一个子表达式。 正则表达式的结构与数学表达式很相似。与数学表达式的“项”相对应,正则表达式由若干个“分支”构成,“分支”之间用符号“|”相连。从逻辑上讲,分支之间是一种“或”的关系,一个字符串只要与正则表达式中的任何一个分支相匹配,这个字符串就与整个正则表达式相匹配。比如,“第三人称代词”可以用正则表达式表示为“他|她|它|他们|她们|它们”。 与数学表达式的“因子”相对应,构成正则表达式“分支”的部件称为“原子”。“原子”与“原子”之间没有任何符号相连。从逻辑上讲,原子之间是串接的关系,一个字符串必须与各个原子依次相匹配,才算与这个分支相匹配。比如在上面的例子中,分支“他们”由两个原子“他”和“们”组成。 正则表达式的本质是它的“原子”可以有多种不同的形式。前面的例子是最简单的情形,即每个原子由一个普通字符组成。除此以外,“原子”还可以是特殊符号、通配符、字符集以及子表达式。 2.1 特殊符号 可以作为特殊符号的原子有: ^ 匹配行首。例如,“^他”匹配出现在行首的“他” 字。值得注意的是,这个符号仅仅表示“行首”这个位置,与它相匹配的字符串长度为0; $ 匹配行末。与“^”相似,它仅表示“行末”这个位置。例如,“。$”匹配出现在行末的句号;</p><h2>半小时精通正则表达式</h2><p>相册 广场 游戏 河外星系的船长 退出 关注此空间vbs小铺 平静的力量在深的海 半小时精通正则表达式 2006-10-21 17:25 跟我学正则表达式! 想必很多人都对正则表达式都头疼.今天,我以我的认识,加上网上一些文章,希望用常人都可以理解的表达方式.来和大家分享学习经验. 开篇,还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始和结束,以下分别举例说明 "^The": 开头一定要有"The"字符串; "of despair$": 结尾一定要有"of despair" 的字符串; 那么, "^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配 "notice": 匹配包含notice的字符串 你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边 接着,说说 '*', '+',和 '?', 他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示: "zero or more"相当于{0,}, "one or more"相当于{1,}, "zero or one."相当于{0,1}, 这里是一些例子: "ab*": 和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串("a", "ab", "abbb", 等); "ab+": 和ab{1,}同义,同上条一样,但最少要有一个b存在 ("ab", "abbb", 等.); "ab?":和ab{0,1}同义,可以没有或者只有一个b; "a?b+$": 匹配以一个或者0个a再加上一个以上的b结尾的字符串. 要点, '*', '+',和 '?'只管它前面那个字符. 你也可以在大括号里面限制字符出现的个数,比如 "ab{2}": 要求a后面一定要跟两个b(一个也不能少)("abb"); "ab{2,}": 要求a后面一定要有两个或者两个以上b(如"abb", "abbbb", 等.); "ab{3,5}": 要求a后面可以有2-5个b("abbb", "abbbb", or "abbbbb"). 现在我们把一定几个字符放到小括号里,比如:</p><h2>正则表达式入门</h2><p>/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]就匹配任何一个元音字母,[.?!]匹配标点符号(.或?或!)</p><p>常用的反义代码 代码/语法 说明 /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)。</p><h2>十 大 经 典 排 序 算 法 总 结 超 详 细</h2><p>前端资源收集 前端资-源收集 收集的资-源 44个 Javascript 变态题解析 javascript 变态题解析 正则表达式收集 正则表达式收集 十大经典排序算法总结(JavaScript描述)排序算法的总结 前端工具库汇总 前端工具库总结 怎么学JavaScript? 学习javascript 的学习指导 不定期更新 JavaScript技巧 javascript 编码技巧总结 H5项目常见问题汇总及解决方案 高质量的常见问题汇总 廖雪峰的 git 教-程 Git忽略规则.gitignore梳理 git 配置提交规则 全局环境,执行环境</p><p>setTimeout promises 很酷,但很多人并没有理解就在用了 promises 使用错误汇总 promises webpack 2 中文文档 输入url后的加载过程 详细解答从输入URL 到页面显示的过程 数组Array.prototype方法 介绍了数组的一些新的方法 移动端真机调试 Web 客户端存储 ESLint中文指南 webpack 2 集成ESLint react-webpack2-skeleton webpack 2 react 成功案例,包括热加载 cookie 小结 CSS定制多行省略 Ajax 知识体系大梳理 js+nodejs完成文件上传 用 webpack 实现持久化缓存 搜罗一切webpack的好文章好工具 深入理解 CSS:字体度量、line-height 和 vertical-align</p><p>原生JS中DOM节点相关API合集 正则表达式前端使用手册 聊一聊H5应用缓存-Manifest fetch进阶指南 mozilla 开发者网络 深入理解javascript原型和闭包系列JavaScript深入系列 深度长文 JavaScript数组所有API全解密你真的懂 JavaScript 的正则吗?webpack2 终极优化 文件上传那些事儿 写给前端工程师的DNS基础知识 初识weex(前端视角) - 环境搭建 前端命名规范 正则表达式 总有你要的编程书单(GitHub )JavaScript深入系列 javascript 的一些功能点 如何在小程序中调用本地接口 移动端浏览器调试方法汇总 HTML5移动开发中的input输入框类型 互联网协议入门</p><h2>易语言正则表达式简明教程</h2><p>正则表达式(regular expression) 前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正则表达式不是问题。 索引 1._引子 2._正则表达式的历史 3._正则表达式定义 3.1_普通字符 3.2_非打印字符 3.3_特殊字符 3.4_限定符 3.5_定位符 3.6_选择 3.7_后向引用 4._各种操作符的运算优先级 5._全部符号解释 6._部分例子 7._正则表达式匹配规则 7.1_基本模式匹配 7.2_字符簇 7.3_确定重复出现 -------------------------------------------------------------------------------- 1. 引子 目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP 等操作系统,PHP,C#,Java等开发环境,以及很多的应用软件中,都可以看到正则表达式的影子。 正则表达式的使用,可以通过简单的办法来实现强大的功能。为了简单有效而又不失强大,造成了正则表达式代码的难度较大,学习起来也不是很容易,所以需要付出一些努力才行,入门之后参照一定的参考,使用起来还是比较简单有效的。 例子: ^.+@.+\\..+$</p><p>这样的代码曾经多次把我自己给吓退过。可能很多人也是被这样的代码给吓跑的吧。继续阅读本文将让你也可以自由应用这样的代码。 注意:这里的第7部分跟前面的内容看起来似乎有些重复,目的是把前面表格里的部分重新描述了一次,目的是让这些内容更容易理解。 2. 正则表达式的历史 正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。 随后,发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的qed 编辑器。 如他们所说,剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。 3. 正则表达式定义 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 列目录时,dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。 正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 3.1 普通字符 由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。 3.2 非打印字符 字符含义 \cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。 \f 匹配一个换页符。等价于 \x0c 和 \cL。 \n 匹配一个换行符。等价于 \x0a 和 \cJ。 \r 匹配一个回车符。等价于 \x0d 和 \cM。</p><h2>[Python]网络爬虫(七):Python中的正则表达式教程</h2><p>一、正则表达式基础 1.1.概念介绍 正则表达式是用于处理字符串的强大工具,它并不是Python的一部分。其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同。它拥有自己独特的语法以及一个独立的处理引擎,在提供了正则表达式的语言里,正则表达式的语法都是一样的。下图展示了使用正则表达式进行匹配的流程: 正则表达式的大致匹配过程是: 1.依次拿出表达式和文本中的字符比较, 2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。 3.如果表达式中有量词或边界,这个过程会稍微有一些不同。 下图列出了Python支持的正则表达式元字符和语法:</p><p>1.2. 数量词的贪婪模式与非贪婪模式 正则表达式通常用于在文本中查找匹配的字符串。 贪婪模式,总是尝试匹配尽可能多的字符; 非贪婪模式则相反,总是尝试匹配尽可能少的字符。 Python里数量词默认是贪婪的。 例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb"。 而如果使用非贪婪的数量词"ab*?",将找到"a"。 1.3. 反斜杠的问题 与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。 假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\": 第一个和第三个用于在编程语言里将第二个和第四个转义成反斜杠,转换成两个反斜杠\\后再在正则表达式里转义成一个反斜杠用来匹配反斜杠\。 这样显然是非常麻烦的。 Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。 同样,匹配一个数字的"\\d"可以写成r"\d"。</p><h2>正则表达式的DFA压缩算法_杨毅夫</h2><p>2009年10月Journal on Communications October 2009 第30卷第10A期通信学报V ol.30No.10A 正则表达式的DFA压缩算法 杨毅夫1,2,3,刘燕兵1,2,3,刘萍1,3,郭牧怡1,2,3,郭莉1,3 (1. 中国科学院计算技术研究所,北京 100190;2. 中国科学院研究生院,北京 100039; 3. 信息内容安全技术国家工程实验室,北京 100190) 摘要:基于确定有限自动机(DFA)的正则表达式匹配技术通常用于网络流量实时处理、病毒检测等系统中。 随着正则表达式的数量不断增加,DFA的存储空间急剧膨胀。为此,提出了一种有效的DFA压缩算法——簇分割算法,首先总结了DFA的一个结构特征;然后依据此特征把DFA分割为3个部分分别存入3个矩阵中,由此构造出2个特征明显的矩阵和1个典型的稀疏矩阵;最后分别对3个矩阵进行压缩。实验表明,簇分割算法在各组数据中均达到了很好的压缩效果,空间压缩率比较稳定。 关键词:字符串匹配;自动机压缩;正则表达式;入侵检测 中图分类号:TP302 文献标识码:A 文章编号:1000-436X(2009)10A-0036-07 Effective algorithm of compressing regular expressions’ DFA YANG Yi-fu1,2,3, LIU Yan-bing1,2,3, LIU Ping1,3, GUO Mu-yi1,2,3,GUO Li1,3 (1. Institute of Computing Technology Chinese Academy of Sciences, Beijing 100190, China; 2. Graduate University of Chinese Academy of Sciences, Beijing 100039, China; 3. National Engineering Laboratory for Information Security Technologies, Beijing 100190, China) Abstract: Regular expression matching technology based on DFA is often used in network real-time processing and virus detection systems. With the number of regular expressions growing, the storage of DFA expands rapidly. An effective al-gorithm of compressing regular expressions’ DFA was presented, which was called cluster-split algorithm. Firstly, a structural characteristic of DFA was summarized. Secondly, the DFA was divided into three parts based the characteristic. Finally, the three parts was compressed respectively. Experiments show that cluster-split algorithm achieves good effects in all test data, and its space compression rate is relatively stable. Key words: string matching; automaton compression; regular expressions; intrusion detection 1引言 近年来,正则表达式匹配技术成为计算机安全领域研究的热点问题。正则表达式广泛应用于入侵检测/入侵防御、病毒检测、协议识别等系统中,如Snort[1]、Bro[2]、L7-filter[3]等。随着网络带宽和流量的膨胀以及需要处理的正则表达式规模的不断增加,传统的正则表达式匹配技术正面临严峻的挑战。 传统的正则表达式匹配技术主要是基于非确定有限自动机(NFA)实现的,其匹配速度较慢,并且每次匹配都需要逐条扫描每条表达式。随着表达式规模不断扩大,基于NFA的匹配技术性能急剧下降,已经不能满足应用的需求,因此人们使用匹配速度更快的基于DFA的匹配技术来代替传统的 收稿日期:2009-08-08 基金项目:国家重点基础研究发展计划(“973”计划)基金资助项目(2007CB311100)Foundation Item: The National Basic Research Program of China (973 Program)(2007CB311100)</p> <div> <div>相关主题</div> <div class="relatedtopic"> <div id="tabs-section" class="tabs"> <ul class="tab-head"> <li id="18987304"><a href="/topic/18987304/" target="_blank">正则表达式入门</a></li> <li id="8769530"><a href="/topic/8769530/" target="_blank">正则表达式入门教程</a></li> <li id="18519752"><a href="/topic/18519752/" target="_blank">正则表达式教程</a></li> <li id="11143900"><a href="/topic/11143900/" target="_blank">正则表达式经典</a></li> </ul> </div> </div> </div> <div class="container"> <div>文本预览</div> <div class="textcontent"> </div> </div> </div> <div class="category"> <span class="navname">相关文档</span> <ul class="lista"> <li><a href="/doc/9613923827.html" target="_blank">Sigil正则表达式入门</a></li> <li><a href="/doc/1b11152584.html" target="_blank">正则表达式教程</a></li> <li><a href="/doc/6717631273.html" target="_blank">正则表达式入门ABC</a></li> <li><a href="/doc/d25401051.html" target="_blank">正则表达式基础知识</a></li> <li><a href="/doc/355966626.html" target="_blank">Linux Regex 正则表达式学习</a></li> <li><a href="/doc/839090180.html" target="_blank">八爪鱼采集器正则表达式入门教程</a></li> <li><a href="/doc/fa8691647.html" target="_blank">C#正则表达式经典入门教程</a></li> <li><a href="/doc/0e5318224.html" target="_blank">正则表达式常用发发总结</a></li> <li><a href="/doc/6113540401.html" target="_blank">正则表达式入门</a></li> <li><a href="/doc/bb4814562.html" target="_blank">生物信息学基础教程第4讲正则表达式教程</a></li> <li><a href="/doc/278866832.html" target="_blank">正则表达式教程</a></li> <li><a href="/doc/848069058.html" target="_blank">正则表达式入门正则表达式 学习参考 推荐</a></li> <li><a href="/doc/fb1330723.html" target="_blank">正则表达式常用元字符</a></li> <li><a href="/doc/6a9651529.html" target="_blank">网址常用正则表达式实例</a></li> <li><a href="/doc/ac14397141.html" target="_blank">21-正则表达式 课件 PPT</a></li> <li><a href="/doc/2b557726.html" target="_blank">Java正则表达式基础用法</a></li> <li><a href="/doc/831246928.html" target="_blank">正则表达式入门教程(VBA)</a></li> <li><a href="/doc/dd7197479.html" target="_blank">Emeditor正则表达式教程</a></li> <li><a href="/doc/572538197.html" target="_blank">正则表达式经典教程</a></li> </ul> <span class="navname">最新文档</span> <ul class="lista"> <li><a href="/doc/0619509601.html" target="_blank">幼儿园小班科学《小动物过冬》PPT课件教案</a></li> <li><a href="/doc/0a19509602.html" target="_blank">2021年春新青岛版(五四制)科学四年级下册 20.《露和霜》教学课件</a></li> <li><a href="/doc/9619184372.html" target="_blank">自然教育课件</a></li> <li><a href="/doc/3319258759.html" target="_blank">小学语文优质课火烧云教材分析及课件</a></li> <li><a href="/doc/d719211938.html" target="_blank">(超详)高中语文知识点归纳汇总</a></li> <li><a href="/doc/a519240639.html" target="_blank">高中语文基础知识点总结(5篇)</a></li> <li><a href="/doc/9019184371.html" target="_blank">高中语文基础知识点总结(最新)</a></li> <li><a href="/doc/8819195909.html" target="_blank">高中语文知识点整理总结</a></li> <li><a href="/doc/8319195910.html" target="_blank">高中语文知识点归纳</a></li> <li><a href="/doc/7b19336998.html" target="_blank">高中语文基础知识点总结大全</a></li> <li><a href="/doc/7019336999.html" target="_blank">超详细的高中语文知识点归纳</a></li> <li><a href="/doc/6819035160.html" target="_blank">高考语文知识点总结高中</a></li> <li><a href="/doc/6819035161.html" target="_blank">高中语文知识点总结归纳</a></li> <li><a href="/doc/4219232289.html" target="_blank">高中语文知识点整理总结</a></li> <li><a href="/doc/3b19258758.html" target="_blank">高中语文知识点归纳</a></li> <li><a href="/doc/2a19396978.html" target="_blank">高中语文知识点归纳(大全)</a></li> <li><a href="/doc/2c19396979.html" target="_blank">高中语文知识点总结归纳(汇总8篇)</a></li> <li><a href="/doc/1619338136.html" target="_blank">高中语文基础知识点整理</a></li> <li><a href="/doc/e619066069.html" target="_blank">化工厂应急预案</a></li> <li><a href="/doc/b019159069.html" target="_blank">化工消防应急预案(精选8篇)</a></li> </ul> </div> </div> <script> var sdocid = "9ba90667b9f67c1cfad6195f312b3169a451ea80"; </script> <script type="text/javascript">bdtj();</script> <footer class="footer"> <p><a href="/tousu.html" target="_blank">侵权投诉</a> © 2022 www.doczj.com <a href="/sitemap.html">网站地图</a></p> <p> <a href="https://beian.miit.gov.cn" target="_blank">闽ICP备18022250号-1</a>  本站资源均为网友上传分享,本站仅负责分类整理,如有任何问题可通过上方投诉通道反馈 <script type="text/javascript">foot();</script> </p> </footer> </body> </html>