0

有人能解释一下正则表达式引擎在尝试匹配时是如何工作的吗

  ^4$ to 749\n486\n4 

我的意思是正则表达式引擎在执行匹配时如何解析字符串

4

1 回答 1

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)

但是,正则表达式实现有办法处理这个问题。有一个多行设置。在 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 -对象

于 2013-05-22T07:31:29.327 回答