在正则表达式中间插入符号或美元符号是否有意义?

时间:2013-07-26 19:47:05

标签: regex

考虑以下正则表达式:

/xyz^abc/
/xyz$abc/

这些会匹配什么?

我知道

  • 插入符号(^),在正则表达式开头使用时,匹配行的开头
  • 美元符号($),在正则表达式结束时使用时,匹配行尾
  • 插入符号(^),当用作字符类的第一个字符时,否定该类

我相信给定的正则表达式永远不会匹配,但我不确定。

3 个答案:

答案 0 :(得分:7)

根据选项的不同,正则表达式中间的^$可以导致匹配:

>>> if re.search(r'xyz.^abc', "xyz\nabc", re.MULTILINE | re.DOTALL):
...    print "Matched"
...
Matched

MULTILINE使^与行的开头匹配,即使该行不在字符串的开头。 DOTALL使.与换行符匹配。

(我无法找到让你的确切示例与之匹配的方法。)

答案 1 :(得分:4)

那些不符合任何东西。但是:

/(xyz$|^xyz)/

这将匹配任何以xyz开头或结束的行。

<强>更新

Andy G指出多线模式可能找到你的正则表达式字符串的匹配项。但这仅适用于实现配置为支持中间字符串锚定匹配的情况。

这来自Regular-Expressions.info(我最喜欢学习和理解正则表达式的地方):

  

如果你有一个由多行组成的字符串,就像第一行一样   line \ nsecond line(其中\ n表示换行符),通常是   希望使用线条,而不是整个字符串。   因此,本教程中讨论的所有正则表达式引擎都有   选项以扩展两个锚点的含义。 ^然后可以匹配   字符串的开头(在上面的字符串中的f之前),以及   每次换行后(在\ n和s之间)。同样,$仍将匹配   在字符串的末尾(在最后一个e之后),也在每个之前   换行符(在e和\ n之间)。

     

在EditPad Pro或GNU Emacs等文本编辑器中,以及像这样的正则表达式工具   PowerGREP,插入符号和美元总是在开头和结尾匹配   每一行。这是有道理的,因为这些应用程序的目的是   使用整个文件,而不是短字符串。

     

在本网站讨论的所有编程语言和库中,   除了Ruby,你必须明确激活这个扩展   功能。它传统上称为“多线模式”。在Perl,   你通过在正则表达式代码之后添加一个m来做到这一点,如下所示:   米/ ^正则表达式$ /米;.在.NET中,锚点在换行符之前和之后匹配   当您指定RegexOptions.Multiline时,例如in   Regex.Match(“string”,“regex”,RegexOptions.Multiline)。

答案 2 :(得分:0)

在Perl中,$也用于将字符串变量插入到正则表达式中:

my $abc = 'pqr';
my $result = ('xyzpqr' =~ /xyz$abc/);   # $result is now true