正则表达式的符号

特殊符号和字符

符号

表示法 描述 正则表达式示例
literal 匹配文本字符串的字面值literal aaa
re1|re2 匹配正则表达式re1或re2 aaa|bbb
. 匹配任何字符(除了\n) b.b
^ 匹配字符串起始部分 ^/bin
$ 匹配字符串结束部分 *.sh$
* 匹配0次或者多次前面出现的正则表达式 [0-9]*
+ 匹配1次或者多次前面出现的正则表达式 [0-9]+
? 匹配0次或者1次前面出现的正则表达式 zoo?
{N} 匹配N次前面出现的正则表达式 [0-9]{3}
{M,N} 匹配m~N次前面出现的正则表达式 [0-9]{3}
[…] 匹配来自字符集的任意一个字符 [13579]
[…x-y…] 匹配0~9范围中的任意一个字符 [0-9]
[^…] 不匹配此字符集中出现的任何一个字符,包括某一范围的字符集 [abc][0-9a-zA-Z]
(*|+|?|{})? 用于匹配上面频繁出现/重复出现符号的非贪婪版本(*、+、?、{}) .*?[a-z]]
(…) 匹配封闭的正则表达式,然后另存为子组 ([0-9]{3})?,f(oo|o)bar

特殊字符

表示法 描述 正则表达式示例
\d 匹配任何十进制数字,与[0-9]一致,(\D与\d相反) \d+
\w 匹配任何字母数字字符,与[0-9a-zA-A]一致,(\W与之相反) \w+
\s 匹配任何空格字符,与[\n\r\t\r\v\f] 形同,(\S与之相反) \s+
\b 匹配任何单词边界,(\B与之相反) \bThe\b
\N 保存已保存的子组N(参看上面的(…)) price:\16
\c 逐字匹配任何特殊字符c(即,仅按照字面意思匹配,不匹配特殊含义) \\,\*,\.
\A(\Z) 匹配字符串的起始(结束)(另见上面的^和$) \Addd

扩展表示法

表示法 描述 正则表达式示例
(?iLmsux) 在正则表达式中嵌入一个或者多个特殊"标记"参数(或者通过 函数/方法) (?x),(?im)
(?:…) 表示一个匹配不用保存的分组 (?:\w+.)*
(?P) 像一个仅由name标识而不是数字ID标识的正则分组匹配 (?P)
(?P=name) 在同一字符串中匹配由(?P)分组之前的文本 (?P=data)
(?#…) 表示注释,所有内容都被忽略 (?#comment)
(?=…) 匹配条件是如果…出现的之后的位置,而不使用输入字符串;称作正向前视断言 (?=.com)
(?!..) 匹配条件是如果…不出现的之后的位置,而不使用输入字符串;称作负向前视断言 (?!.net)
(?<=…) 匹配条件是如果…出现的之前的位置,而不使用输入字符串;称作正向后视断言 (?<=800-)
(? 匹配条件是如果…不出现的之前的位置,而不使用输入字符串;称作正向后视断言 (?
(?(id/name)Y|N) 如果分组所提供的id或者name存在,就返回正则表达式的条件匹配Y,如果不存在,就返回N;|N是可选项 (?(1)y|x)

正则前面的 (?i) (?s) (?m) (?is) (?im) 是什么意思?

这是内联匹配模式,通常用内联匹配模式代替使用枚举值RegexOptions指定的全局匹配模式,写起来更简洁。

  1. (?i) 表示所在位置右侧的表达式开启忽略大小写模式
  2. (?s) 表示所在位置右侧的表达式开启单行模式。
    注意:(?s)通常在匹配有换行的文本时使用
  3. (?m) 表示所在位置右侧的表示式开启指定多行模式。
    更改 ^ 和 $ 的含义,以使它们分别与任何行的开头和结尾匹配,而不只是与整个字符串的开头和结 尾匹配。
    注意:(?m)只有在正则表达式中涉及到多行的“^”和“$”的匹配时,才使用Multiline模式。
    上面的匹配模式可以组合使用,比如(?is),(?im)。
    另外,还可以用(?i:exp)或者(?i)exp(?-i)来指定匹配的有效范围。

JavaScript正则表达式m修饰符:

m修饰符规定正则表达式可以执行多行匹配。
m修饰符的作用是修改^和$在正则表达式中的作用,让它们分别表示行首和行尾。
在默认状态下,一个字符串无论是否换行只有一个开始^和结尾$,如果采用多行匹配,那么每一个行都有一个^和结尾$。

  • 语法结构:

    构造函数方式:

     new RegExp("regexp","m")
    
  • 对象直接量方式:

     /regexp/m
    
  • 浏览器支持:

  1. IE浏览器支持此元字符。
  2. 火狐浏览器支持此元字符。
  3. 谷歌浏览器支持此元字符。

实例代码:
实例一:

var str="This is an\n antzone good"; 
var reg=/an$/;
console.log(str.match(reg));

以上代码不能够匹配字符串"an",尽管"an"后面已经换行了,但是并没有采用多行匹配,所以不是字符串行的结尾。

实例二:

var str="This is an\n antzone good"; 
var reg=/an$/m;
console.log(str.match(reg));

以上代码可以匹配字符串"an",因为采用了多行匹配。

实例三:

var reg = /^b/;
var str = 'test\nbbs';
execReg(reg,str);

匹配失败,因为字符串的开头没有b字符。但是加上m修饰符之后:

实例四:

var reg = /^b/m;
var str = 'test\nbbs';
execReg(reg,str);

匹配到b,因为加了m修饰符之后,^已经表示行首,由于bbs在字符串第二行的行首,所以可以成功地匹配。

参考:
[1]: python核心编程(第三版) [美]Wesley Chun著,孙波翔,李斌,李晗 译
[2]: https://blog.csdn.net/codepen/article/details/40396769
[3]: https://www.jb51.net/article/101139.htm

你可能感兴趣的:(正则表达式的符号)