【问题标题】:How Regex engine parse anchors [duplicate]正则表达式引擎如何解析锚点[重复]
【发布时间】:2013-05-22 02:36:22
【问题描述】:

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

  ^4$ to 749\n486\n4 

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

【问题讨论】:

标签: regex


【解决方案1】:

正则表达式 ^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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-25
    • 2012-01-02
    • 1970-01-01
    • 2011-01-23
    • 2012-11-21
    • 2014-10-28
    • 1970-01-01
    • 2017-02-22
    相关资源
    最近更新 更多