Regex 在正则表达式中间有插入符号或美元符号是有意义的吗?
考虑以下正则表达式:Regex 在正则表达式中间有插入符号或美元符号是有意义的吗?,regex,Regex,考虑以下正则表达式: /xyz^abc/ /xyz$abc/ 这些和什么搭配 我知道 插入符号^用于正则表达式的开头时,与行的开头相匹配 美元符号$用于正则表达式的结尾时,与行的结尾相匹配 插入符号^用作字符类的第一个字符时,会对该类求反 我相信给定的正则表达式永远不会匹配任何东西,但我不确定。这些正则表达式不会匹配任何东西。然而: /(xyz$|^xyz)/ 这将匹配以xyz开头或结尾的任何行 更新: Andy G指出,多行模式可能会为您的正则表达式字符串找到匹配项。但这仅适用于将实现配置
/xyz^abc/
/xyz$abc/
这些和什么搭配
我知道
插入符号^用于正则表达式的开头时,与行的开头相匹配
美元符号$用于正则表达式的结尾时,与行的结尾相匹配
插入符号^用作字符类的第一个字符时,会对该类求反
我相信给定的正则表达式永远不会匹配任何东西,但我不确定。这些正则表达式不会匹配任何东西。然而:
/(xyz$|^xyz)/
这将匹配以xyz开头或结尾的任何行
更新:
Andy G指出,多行模式可能会为您的正则表达式字符串找到匹配项。但这仅适用于将实现配置为支持中间字符串锚匹配的情况
这是我最喜欢学习和理解正则表达式的地方:
/xyz^abc/
/xyz$abc/
如果你有一个由多行组成的字符串,比如第一行
第二行\n表示换行符的第二行,通常为
希望使用线条,而不是整个字符串。
因此,本教程中讨论的所有正则表达式引擎都具有
扩展两个锚的含义的选项。^然后可以在
上述字符串中f之前的字符串的开头,以及
在\n和s之间的每个换行符之后。同样,美元仍将匹配
在最后一个e之后的字符串末尾,也在每个
e和\n之间的换行符
在文本编辑器中,如EditPad Pro或GNU Emacs,以及正则表达式工具中,如
PowerGREP,插入符号和美元总是在游戏开始和结束时匹配
每行。这是有意义的,因为这些应用程序的设计目的是
使用整个文件,而不是短字符串
在本网站讨论的所有编程语言和库中,
除了Ruby,您必须显式地激活这个扩展
功能。传统上称为多线模式。在Perl中,
您可以通过在正则表达式代码后添加一个m来完成此操作,如下所示:
m/^regex$/m;。在.NET中,锚点在换行之前和之后匹配
当您指定RegexOptions.Multiline时,例如在
Regex.Matchstring、Regex、RegexOptions.Multiline
根据选项,正则表达式中间的A^或A$可以导致匹配:
>>> if re.search(r'xyz.^abc', "xyz\nabc", re.MULTILINE | re.DOTALL):
... print "Matched"
...
Matched
多行使“^”匹配行的开头,即使该行不在字符串的开头。多多尔制造了很多东西。匹配换行符
我找不到一种方法使您的确切示例与任何内容匹配。在Perl中,$还用于将字符串变量插入正则表达式:
my $abc = 'pqr';
my $result = ('xyzpqr' =~ /xyz$abc/); # $result is now true
我想这取决于regex的味道。它们可以匹配字面等价物“^”和“$”作为字面字符。@DanielHaley:要实现这一点,它们不需要转义吗?是否有一种正则表达式的味道可以让一个unscaped^匹配一个literal^?@RichieHindle-它们在GVIM中工作unscaped。我还没试过别的东西。我想大多数口味都需要逃逸。@RichieHindle:POSIX-BREs允许;例如,sed's/o^b/xxx/’感谢更好的例子@ruakh。我不认为多行模式与OP的例子相关,因为^和$是零宽度断言,不会吞并换行符;例如,字符串“abc\ndef”与regex/c$\n^d/匹配,但与/c$d/或/c^d/不匹配。编辑后添加:哦,我现在看到RichieHindle发布了一个答案,说明了同样的观点:-