【发布时间】:2013-05-22 02:36:22
【问题描述】:
能否解释一下正则表达式引擎在尝试匹配时是如何工作的
^4$ to 749\n486\n4
我的意思是正则表达式引擎在执行匹配时如何解析字符串
【问题讨论】:
标签: regex
能否解释一下正则表达式引擎在尝试匹配时是如何工作的
^4$ to 749\n486\n4
我的意思是正则表达式引擎在执行匹配时如何解析字符串
【问题讨论】:
标签: regex
正则表达式 ^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
在python中
>>> 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-objects
【讨论】: