匹配模式是指匹配时使用的规则。设定特定的模式,可能会改变对正则表达式的识别,也可能会改变正则表达式中的字符的匹配规定。经常使用匹配模式有:不区分大小写模式、单行模式、多行模式、注释模式。python
不区分大小写是指正则表达式在匹配文本字符串的时候,不区分文本字符串中的大小写问题。正则表达式
模式指定方式spa
1.模式修饰符指定:模式修饰符(?i),例如:正则表达式(?i)the,表示匹配文本字符串中的不区分大小写the。code
2.预约义的常量做为特殊参数传入指定:python中使用常量re.I或者re.IGNORECASE;JS中使用/regex/i,其中re.I用法例:re.search(patten, string, re.I);JS中regex为匹配为本,如1中例子的the。blog
提取超连接的正则表达式图片
(?i)<a\s+href\s*=\s*["']?([^"'\s]+)["']?>([^<]+)</a>
提取标题的正则表达式unicode
(?i)<title>([^>]+)</title>
提取图片的正则表达式字符串
(?i)<img\s[^>]*?src=['"]?([^'"]+)[^'"]?[^>]*>
单行模式下,全部文本只有一行。回到点号匹配任意字符问题,咱们提到过,点号是不能匹配\n换行符的,可是在单行模式下,全部文本一行显示,相应的\n换行符也只是一个普通的空白符了,不具备换行效果的,所以,点号是能够匹配的。故,点号在单行模式下,是能够匹配任意字符的。string
单行模式影响的是点号的匹配规则:默认模式下,点号能够匹配\n换行符之外的任意字符;单行模式下,点号能够匹配任意字符包括\n换行符。it
模式指定方式
1.模式修饰符指定:模式修饰符(?s),用法在正则表达式开头加上(?s)表示此正则表达式启动单行模式;
2.预约义的常量做为特殊参数传入指定:python中使用常量re.S或者re.DOTALL;JS中不支持单行模式,其中re.S用法例:re.search(patten, string, re.S)。
多行模式与单行模式没有必要的联系。多行模式影响的是^和$的匹配规则:默认模式下,^和$匹配的是整个字符串的起始位置和结束位置;多行模式下,^和$能够匹配字符串内部的起始位置和结束位置。
默认模式下,“人生苦短\n我用python”和多行模式下,“人生苦短\n我用python”。首先明白一点,没有指定单行模式状况下,\n换行符都是表示换行的,再也不是普通的空白符。即
“人生苦短
我用python”
默认模式下,^和$会分别匹配“人”以前位置和“n”以后位置;而多行模式下,^匹配的位置就变成了“人”以前的位置和“我”以前的位置,$匹配的位置变成了“短”以后的位置和“n”以后的位置。“$短”和“^我”都是匹配了字符串内部的起始位置和结束位置。
模式指定方式
1.模式修饰符指定:模式修饰符(?m),用法在正则表达式开头加上(?m)表示此正则表达式启动多行模式;
2.预约义的常量做为特殊参数传入指定:python中使用常量re.M或者re.MULTILINE;JS中用/regex/m,其中re.M用法例:re.search(patten, string, re.M)。
正则表达式通常添加注释的方法为(?#comment),能够在正则表达式的任意位置添加注释。注释模式添加注释是把正则表达式以多行字符串形式表示,在每行正则规则后面添加 #comment,表示注释。
模式指定方式
1.模式修饰符指定:模式修饰符(?x),用法在正则表达式开头加上(?x)表示此正则表达式启动注释模式;
2.预约义的常量做为特殊参数传入指定:python中使用常量re.X或者re.VERBOSE;JS中用/regex/x,其中re.S用法例:re.search(patten, string, re.X)。
pattern = r''' (?x) #enable multiline and extended mode ( (\d{4}) #year - #dash (\d{2}) #month - (\d{2}) #day ) '''
re.U或者re.UNICODE,字符组匹配字符能够是unicode字符,包括中文字符。
re.A或者re.ASCII,字符组匹配字符是ASCII字符。