可以解释Regex引擎在尝试匹配时如何工作
^4$ to 749\n486\n4
我的意思是Regex引擎在执行匹配时如何解析字符串
答案 0 :(得分:0)
正则表达式^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)
但是,regexp实现有一种解决方法。有一个多线设置。在perl
DB<3> x $str =~ /^4$/m
0 1
在python中
>>> re.search('^4$',s,re.MULTILINE)
<_sre.SRE_Match object at 0x7f446874b030>
python docs解释了这样的多行模式
re.MULTILINE 指定时,模式字符'^'匹配字符串的开头和at 每行的开头(紧随其后) 每个换行符);并且模式字符'$'在结尾处匹配 字符串和每行的末尾(紧接在每行之前) 新队)。默认情况下,'^'仅匹配字符串的开头, 和'$'仅在字符串的末尾和紧接在字符串之前 字符串末尾的换行符(如果有的话)。
如果你的多线字符串中你真的想知道它是否以一行中的数字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-objects