考虑以下正则表达式:
/xyz^abc/
/xyz$abc/
这些会匹配什么?
我知道
^
),在正则表达式开头使用时,匹配行的开头$
),在正则表达式结束时使用时,匹配行尾^
),当用作字符类的第一个字符时,否定该类我相信给定的正则表达式永远不会匹配,但我不确定。
答案 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