Regex引擎如何解析锚点

时间:2013-05-22 02:36:23

标签: regex

可以解释Regex引擎在尝试匹配时如何工作

  ^4$ to 749\n486\n4 

我的意思是Regex引擎在执行匹配时如何解析字符串

1 个答案:

答案 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