
正则表达式非常有用,查找、匹配、处理字符串、替换和转换字符串,输入输出等。下面整理一些常用的正则表达式。
这里的.*是指匹配所有url中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.就是引用前面里的(.*)字符。这里的.*是指匹配所有url中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.就是引用前面里的 (.*)字符。标记是连续字符(不是分隔符)的最大序列,则认为那些分隔符字符本身即为标记。
惰性匹配:先看字符串中的第一个字母是不是一个匹配,如果单独一个字符还不够就读入下一个字符,如果还没有发现匹配,就不断地从后续字符中读取,只道发现一个合适的匹配,然后开始下一次的匹配。定位字符是正则表达式中又一类非常重要的字符,它的主要作用是用于对字符在匹配对象中的位置进。定位字符是正则表达式中又一类非常重要的字符,它的主要作用是用于对字符在匹配对象中的位置进行描述。
3.$:匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 'n' 或 'r' 之前的位置。
4.*:匹配前面的子表达式零次或多次。例如,zo能匹配 "z" 以及 "zoo"。等价于{0,}。
5.+:匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
6.?:匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
7.{n}:n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
8.{n,}:n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
9.{n,m}:m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
需要注意的是,不管是贪婪模式还是非贪婪模式,正则表达式总是会寻找字符串中第一个可能匹配的位置,如,对于字符串aaabb,/a+b/会匹配aaabb,/a+。 非贪婪匹配,在正则表达式中匹配是贪婪的,程序会尽可能匹配更多的字符,当然这有时候非我们所愿.为了防止其贪婪匹配,于是 。既然有贪婪模式,那么肯定会有非贪婪模式,让正则表达式尽可能少的匹配,也就是说一旦成功匹配不不再继续尝试,做法很简单,在量词后加上 。
11.·:匹配除 "n" 之外的任何单个字符。要匹配包括 'n' 在内的任何字符,请使用象 '[.n]' 的模式。
所获取的匹配可以从产生的 matches 集合得到,在vbscript 中使用 submatches 集合js正则表达式 不匹配,在jscript 中则使用 $0…$9 属性。所获取的匹配可以从产生的 matches 集合得到,在vbscript 中使用 submatches 集合,在visual basic scripting edition 中则使用 $0&hellip。所获取的匹配可以从产生的 matches 集合得到,在vbscript 中使用 submatches 集合,在jscript 中则使用 $0&hellip。
13.(?:pattern):匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
14.(?=pattern):正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
15.(?!pattern):负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
16.x|y:匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
17.[xyz]:字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
18.[^xyz]:负值字符集合。匹配未包含的任意字符。例如, '1' 可以匹配 "plain" 中的'p'。
19.[a-z]:字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
20.[^a-z]:负值字符范围。匹配任何不在指定范围内的任意字符。例如,'2' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。“\b” 匹配一个单词边界,也就是指单词和空格间的位置。“\b” 和”\b”相反,匹配非单词边界(例如:”er\b”可以匹配”verb”中的”er”,但是不能匹配”never”中的”er”)。
'er/b' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。'er\b' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。例如, 'er/b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
23.\cx:匹配由 x 指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
24.\d:匹配一个数字字符。等价于 [0-9]。
25.\D:匹配一个非数字字符。等价于3。
26.\f:匹配一个换页符。等价于 x0c 和 cL。
27.\n:匹配一个换行符。等价于 x0a 和 cJ。
28.\r:匹配一个回车符。等价于 x0d 和 cM。

29.\s:匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。
30.\S:匹配任何非空白字符。等价于4。
31.\t:匹配一个制表符。等价于 x09 和 cI。
32.\v:匹配一个垂直制表符。等价于 x0b 和 cK。
33.\w:匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
34.\W:匹配任何非单词字符。等价于 '5'。
我们已经发现了,在正则表达式中所有的字母字符和数字都是按照字面意思与自身相匹配的.javascript的正则表达式还通过以反斜杠(\)开头的转义序列支持某些非。首先,这是一个php正则表达式js正则表达式 不匹配,第一个参数是号的正则表达式,第二个是你的字符串,如果匹配成功将返回真,第三个参数将匹配到的身份照赋值给$arr,他是个数组格式,$arr[0]就是你完整匹配到的号。2)、raw字符串的使用:如果要匹配一个.,*这种元字符,就需要加'\'进行转义,即要表示一个'\',正则表达式需要多加一个转义,写成'\\',但是python字符串又需要对其转义,最终变成re.compile('\\\\'),这样就不易理解且很乱,使用raw字符串让正则表达式变得易读,即写成re.compile(r'\\'),另一个方法就是将字符放到字符集中,即[\],效果相同。
^\s+ 表示以空格开头的连续空白字符,\s+$ 表示以空格结尾的连续空白字符,加上() 就是将匹配到的结果提取出来,由于是 | 的关系,因此这个表达式最多会match到两个结果集,然后执行两次替换:。利用scanf函数从键盘接收一字符(或整数)时,它只读入字符(或整数)本身,而把字符(或整数)后的回车符留在输入缓冲区内。在正则中/[0-9]/表示匹配字符从0到9中的任意一个,/[a-z]/表示匹配从a到z中的任意一个字母只要是在ascii码表里连续出现的字符,都可以用这样的表示法。
37.\n:标识一个八进制转义值或一个向后引用。如果 n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
38.\nm:标识一个八进制转义值或一个向后引用。如果 nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 nm 将匹配八进制转义值 nm。
39.\nml:如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
ECMAScript通过RegExp类型支持正则表达式,如下:
var expression = /pattern/flags;
这些字符都是在正则表达式中被“征用”了,称之为特殊字符,引用的时候,必须前面加 "\" 进行区分,比如你要用到 "$" 字符的时候,必须使用 "\$",这样程序才不会以为你是在匹配行尾。此标记将环境变量var的值为val,val可以包含可扩展的正则表达式反向引用($n和%n)。反向引用允许在正则表达式内部引用之前捕获分组匹配的文本,形式是\num,num表示所引用分组的编号。
例如:匹配第一个bat或者cat,不区分大小写
var pattern = /[bc]at/i;
它接收两个参数:一个是要匹配的字符串模式,另一个是可选的标志字符串。可以使用字面量定义的任何表达式,都可以使用构造函数来定义,还是以上面的例子为例:
var pattern = new RegExp("[bc]at","i");
注意:RegExp构造函数模式参数时字符串,所以再某些情况下要对字符进项双重转义。所有元字符都必须双重转义,如字面量模式为/\[bc\]at/,那么等价的字符串为"/\\[bc\\]at/"
查看所有元字符参考:《JavaScript RegExp 对象》
例子:
var re = null,
i;
for(i=0; i < 10; i++){
re = /cat/g;
console.log(re.test("catastrophe"));
}
for(i=0; i < 10; i++){
re = new RegExp("cat","g");
console.log(re.test("catastrophe"));
}
打印结果都为10个true
扩展:正则表达式中的RegExp.$1
RegExp 是javascript中的一个内置对象。为正则表达式。
当offset=2时,正则表达式为:(^.{2}) .表示除\n之外的任意字符,后面加{2} 就是匹配以数字或字母组成的前两个连续字符,加()就会将匹配到的结果提取出来,然后通过replace将匹配到的结果替换为新的字符串,形如:结果=结果+str。例如正则表达式a[0-9]{3} 能够匹配字符"a"后面跟着正好3个数字字符的串,例如a123、a348等,但是不匹配a1234。字符串.这个串由三个字符以及跟随在字母之后的一位数字构成.这些复杂的模式使用的正则表达式语法指定了该表达式中每个元素要重复出现的次数.。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-108443-1.html