正則表達式使用帮助
7. 正則表達式匹配规则 7.1 基本模式匹配 模式,是正规表达式最主要的元素,它们是一组描写叙述字符串特征的字符。 SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。模式能够非常easy,由普通的字符串组成,也能够非常复杂。往往用特殊的字符表示一个范围内的字符、反复出现,或表示上下文。比如:
这个模式包括一个特殊的字符^,表示该模式仅仅匹配那些以once开头的字符串。 比如该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"不匹配。正如如^符号表示开头一样,$符号用来匹配那些以给定模式结尾的字符串。
这个模式与"Who kept all of this cash in a bucket"匹配,与"buckets"不匹配。字符^和$同一时候使用时,表示精确匹配(字符串与模式一样)。比如:
仅仅匹配字符串"bucket"。 假设一个模式不包括^和$,那么它与不论什么包括该模式的字符串匹配。比如:模式
与字符串
是匹配的。 所以假设我们要检測一个字符串是否以制表符开头,能够用这个模式:
相似的,用\n表示“新行”,\r表示回车。其它的特殊符号。能够用在前面加上反斜杠,如反斜杠本身用\\表示,句号.用\.表示。以此类推。
当用户提交一个FORM以后。要推断输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效,用普通的基于字面的字符是不够的。 要建立一个表示全部元音字符的字符簇。就把全部的元音字符放在一个方括号中:
这个模式与不论什么元音字符匹配。但仅仅能表示一个字符。 用连字号能够表示一个字符的范围。如:
同样的。这些也仅仅表示一个字符,这是一个非常重要的。假设要匹配一个由一个小写字母和一位数字组成的字符串,比方"z2"、"t6"或"g7",但不是"ab2"、"r2d3" 或"b52"的话,用这个模式:
虽然[a-z]代表26个字母的范围。但在这里它仅仅能与第一个字符是小写字母的字符串匹配。
这个模式与"&5"、"g7"及"-2"是匹配的。但与"12"、"66"是不匹配的。以下是几个排除特定字符的样例:
特殊字符"." (点,句号)在正规表达式中用来表示除了“新行”之外的全部字符。所以模式"^.5$"与不论什么两个字符的、以数字5结尾和以其它非“新行”字符开头的字符串匹配。模式"."能够匹配不论什么字符串,除了空串和仅仅包括一个“新行”的字符串。
7.3 确定反复出现 一个单词有若干个字母组成,一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的反复出现的次数。
这些样例描写叙述了花括号的三种不同的使用方法。 一个数字。{x}的意思是“前面的字符或字符簇仅仅出现x次”。一个数字加逗号,{x,}的意思是“前面的内容出现x或很多其它的次数”。两个用逗号分隔的数字,{x,y}表示“前面的内容至少出现x次。但不超过y次”。我们能够把模式扩展到很多其它的单词或数字:
最后一个样例不太好理解,是吗?这么看吧:与全部以一个可选的负号(\-{0,1})开头(^)、跟着0个或很多其它的数字([0-9]{0,})、和一个可选的小数点(\.{0,1})再跟上0个或多个数字([0-9]{0,})。而且没有其它不论什么东西($)。以下你将知道能够使用的更为简单的方法。 "与{0,1}是相等的。它们都代表着:“0个或1个前面的内容”或“前面的内容是可选的”。所以刚才的样例能够简化为:
特殊字符"*"与{0,}是相等的,它们都代表着“0个或多个前面的内容”。最后,字符"+"与 {1,}是相等的,表示“1个或多个前面的内容”,所以上面的4个样例能够写成:
当然这并不能从技术上减少正规表达式的复杂性。但能够使它们更easy阅读。 一、正則表達式概述: 只是,它们并非您想象的那么新鲜。 和 * 字符来帮助查找您正寻找的文件。? 字符匹配文件名称中的单个字符。而 * 则匹配一个或多个字符。一个如 'data? .dat' 的模式能够找到下述文件:data1.dat、data2.dat等等。假设使用 * 字符取代 ? 字符,则将扩大找到的文件数量。 'data*.dat' 能够匹配下述全部文件名称:data.dat、data1.dat、data12.dat等等。虽然这样的搜索文件的方法肯定非常实用,但也十分有限。 ? 和 * 通配符的有限能力能够使你对正則表達式能做什么有一个概念,只是正則表達式的功能更强大,也更灵活。
这样的技术对于静态文本中的简单搜索和替换任务可能足够了,可是因为它缺乏灵活性,因此在搜索动态文本时就有困难了,甚至是不可能的。
该模式描写叙述在查找文字主体时待匹配的一个或多个字符串。正則表達式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
假设设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。 假设设置了RegExp 对象的 Multiline 属性。$ 也匹配 '\n' 或 '\r' 之前的位置。 * 等价于{0,}。
+ 等价于 {1,}。
" 能够匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
'o{1,}' 等价于 'o+'。 'o{0,}' 则等价于 'o*'。
刘, "o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o? '。请注意在逗号和两个数之间不能有空格。
' 将匹配单个 "o",而 'o+' 将匹配全部 'o'。 所获取的匹配能够从产生的 Matches 集合得到。在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。 attern) :y|ies) 就是一个比 'industry|industries' 更简略的表达式。 =pattern)
!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说。在一个匹配发生后,在最后一次匹配之后马上開始下一次匹配的搜索。而不是从包括预查的字符之后開始
匹配所包括的随意一个字符。 比如, '[abc]' 能够匹配 "plain" 中的 'a'。 匹配未包括的随意字符。比如, '[^abc]' 能够匹配 "plain" 中的'p'。 比如。'[a-z]' 能够匹配 'a' 到 'z' 范围内的随意小写字母字符。
匹配不论什么不在指定范围内的随意字符。比如。'[^a-z]' 能够匹配不论什么不在 'a' 到 'z' 范围内的随意字符。 比如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之中的一个。否则,将 c 视为一个原义的 'c' 字符。
等价于 [^0-9]。
等价于 \x0c 和 \cL。
等价于'[A-Za-z0-9_]'。 十六进制转义值必须为确定的两个数字长。比如, '\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。 正則表達式中能够使用 ASCII 编码。 . 假设 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。假设前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
:), (?=), [] 圆括号和方括号 |
