有人能解释一下正则表达式引擎在尝试匹配时是如何工作的吗
^4$ to 749\n486\n4
我的意思是正则表达式引擎在执行匹配时如何解析字符串
正则表达式^4$
表示匹配仅包含数字 4 的行
如果将此正则表达式应用于包含换行符的字符串,则它将字符串的第一个字符视为行首,将第一个换行符视为行尾。换行符后的附加字符被有效地忽略。perl 中的示例
DB<1> $str="749\n486\n4";
DB<2> x $str =~ /^4$/
empty array
python中的示例
>>> import re
>>> s="749\n486\n4"
>>> re.search('^4$',s)
但是,正则表达式实现有办法处理这个问题。有一个多行设置。在 perl 中
DB<3> x $str =~ /^4$/m
0 1
在蟒蛇
>>> re.search('^4$',s,re.MULTILINE)
<_sre.SRE_Match object at 0x7f446874b030>
python 文档解释这样的多行模式
re.MULTILINE 指定时,模式字符 '^' 匹配字符串的开头和每行的开头(紧跟在每个换行符之后);并且模式字符 '$' 匹配字符串的末尾和每行的末尾(紧接在每个换行符之前)。默认情况下,'^' 仅匹配字符串的开头,而 '$' 仅匹配字符串的末尾以及字符串末尾的换行符(如果有)之前。
如果在您的多行字符串中,您实际上想知道它是否以单行上的数字 4 结尾,那么有一个语法功能
DB<4> x $str =~ /^4\z/m
0 1
请参阅http://perldoc.perl.org/perlre.html尤其是关于 m 标志和 \a、\z、\Z 或http://docs.python.org/2/library/re.html#regular-expression -对象