Sigil正则表达式入门.doc_第1页
Sigil正则表达式入门.doc_第2页
Sigil正则表达式入门.doc_第3页
Sigil正则表达式入门.doc_第4页
Sigil正则表达式入门.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Sigil正则表达式入门正则表达式,是一种用特殊符号表示文字的方法,主要用在查找和替换方面。下面的例子可以让你知道正则表达式是干什么用的。在一个文本中,有这样的一些内容:序章第一章 ABCDEF第二章 GHIJKL第三章 终章这种内容我们都很熟悉,你有没有想过,用什么办法可以把这些内容一次过查找出来呢?为了简化,我们先来看这个部分。第一章第二章第三章可以看到,这些内容有着极高的相似性,由“第”,“章”开头和结尾,中间有着一些数字。如果我们能用一个什么符号来代表中间的所有字,比如一个圆点“.”,不就可以用这样的方式来查找出所有这样的内容了吗。第.章很早之前,就有人发明了一套完整的方案,让我们可以用各种不同的符号来达到这种目的,那就是我们将要了解的正则表达式。正则表达式作为一种描述字符的方案,在大量软件、编程语言中都有所运用,而在这些不同的平台上,正则表达式的使用方式又往往会有或多或少的差异,在某个平台上管用的表达式,换个地方可能就要改改才能正确运行。那么在这篇文章里,我们主要是讲Sigil中的正则表达式,至于推广应用,就要靠大家去查找资料了。1. 元字符我们前面提到,正则表达式一个重要作用就是用特别的符号来代表一类字符,而这些符号就叫做“元字符”。这些元字符在大多数环境下都是通用的。注意,元字符中所有符号都是半角符号,也就是通常说的英文符号。以下是一些常见的元字符,实际上还有更多。这些元字符都经过测试,在Sigil下有效。符号意义说明.任意一个字符最简单的元字符,匹配任意字符,但不包括换行符“n”。转义把元字符改变为普通字符,或者把某些普通字符转变为元字符。比如,“.”就是代表普通的点号,不代表其他字符。s空白字符半角空格、制表符等空白字符。在Sigil中还能匹配到换行符“n”和空白行,使用要注意。注意,不能匹配到全角空格。t制表符匹配制表符。n换行符表示文章的换行,这是一个不可见符号,在例子中,这个符号在“_”的位置。aaanbbb你能够通过“n”找到换行符,但不能够插入换行符。要在替换结果中换行,需要用“r”。r回车代表一个回车符。这个符号不会在文本中出现,因此不能查找到。但是如果你需要在查找结果中插入一个换行,那么就要用“r”。注意,插入后在文本中出现的仍然会是“n”而不是“r”。d任意一个阿拉伯数字也就是可以代表09中的任意一个。D任意一个非阿拉伯数字09以外的字符,同样的,不包括换行符“n”行首即一行的开头。Sigil中不能单独使用,要配合其他字符。比如,“a”表示在行首的“a”,能匹配到第一行和第三行的字母“a”。第二行因为行首是空格,因此匹配不到。abcabcabc$行尾表示任意一行的结尾,不包括换行符。在Sigil中不能单独使用。比如,“c$”表示位于行尾的“c”,能够匹配到第一行和第二行的字母“c”。abcabcabcd+一或更多表示一个或更多。必须配用其他字符使用。添加在一个字符后面,表示一个或更多个该字符。相当于“1,”比如,“a+”表示一个以上的“a”,以下例子都能匹配到。aaaaaa?尽可能少表示尽可能少。必须配合其他字符使用。比如,“accccbb”中“a.*b”匹配到“accccbb”,而“a.*?b”就能只匹配到“accccb”。注意:在某些平台的正则表达式中,这一功能很可能由“-”减号提供。|或一个逻辑选择符。“aa|bb”既可以匹配到“aa”也可以匹配到“bb”。可以用到多个选项中,比如“aa|bb|cc”。“1|2|3”相当于“123”。*尽可能多即无或更多。相当于“0,”n,m个数范围表示匹配项的个数范围。比如,“a3”表示“aaa”,“a2,4”表示“aa”或“aaa”或“aaaa”,“a1,”表示一个以上的“a”。注意,“a,2”应该表示两个以下的“a”,但是这种写法在Sigil中无效,要写成“a0,2”。包含“”本身匹配一个字符。比如,“abc”匹配“a”、“b”或“c”。通常不分顺序,“”和“”一样。“”中用“-”表示范围,“a-z”表能匹配到“a”到“z”全部26个字母之一。比如,“”和“d”是一样的,但是“d”速度更快。如果要在“”中匹配“-”本身,把“-”写在最前面,或者把它转义“-”。比如“-0-9”,就能匹配所有阿拉伯数字和“-”。不包含“”的逆操作。比如“abc”,能匹配到第二行,第三行。abcadcafc注意,因为“”中符号是无序的,因此如果要排除字符串,要用其他方法。()捕获组“(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)最少匹配放在表达式的最前端,使得整个正则表达式实现最少匹配。比如以下例子:AAABBBCCC正则表达式“.*”会匹配到整个句子。而“(?U).*”只会匹配到“AAABBB”。注:这是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”前面的一个字符,为了不把这个字符也删除,所以要用“()”把这个字符保护起来。扩展实际上我们还可以使用“零宽断言”来达到这个效果,写法是“(?!,。$)n”,直接替换为空,零宽断言本身就保护了字符。但是作为一个入门应用,我还是先介绍使用“”的方法,关于零宽断言,有兴趣的朋友可以到这个网址了解:/rcom10002/acle/details/31593593.3 识别章节标题这是很常见的一个需求,我们往往要为章节标题添加,之类的标签。通过3.1我们已经了解到如何添加标签,因此这里着重讲解如何识别标题。原文本序章第一章 XXXX第二章 CCCC第三章 AAAA终章后记目标文本序章第一章 XXXX第二章 CCCC第三章 AAAA终章后记使用元字符. ,* ,(),1,|,m,n查找(序章|第.1,3章|终章|后记).*)替换1解说表达式开始的“”查找内容必须是每一行的开头,这样才不会匹配到正文中的“第N章”之类的内容。当然,还是无法完全排除匹配到正文的可能性,因此要注意替换次数,如果次数和章节数目不符,就要留意了。通过“|”的使用,我们可以在一个表达式中就匹配到所有的内容,要善用“|”。“第.1,3章”是一个保险,最多匹配到“第九十九章”这样的字符串,在实际使用中,往往只需要写“第.章”。如果是“第1章”这样的,就可以用“第d章”来更精准的匹配。3.5 自动插入内容原文本XXXX目标文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论