0

我一直认为在正则表达式中,^和#之类的'动词'必须跟在某些东西之后,例如^a,行以a开头,或#a,行以a结尾,但是^#对我来说,就像#不是' verb' 在这种情况下,就像 a 是动词 '^' 的宾语

有没有人可以给我一个更好的解释?

4

2 回答 2

1

我在这里很紧张,我猜您实际上想问为什么^$与空行匹配。

理解这一点的关键是,并非正则表达式匹配的所有内容实际上都必须是一个字符(或多个字符),它也可以是字符串中的一个位置。匹配位置的正则表达式标记称为“锚”或“断言”。他们实际上并不使用任何文本,他们只是确保正则表达式引擎当前位于字符串中的某个位置。

因此,例如,^如果正则表达式引擎当前位于字符串的开头,则匹配。在某些情况下,根据当前设置,它也可能匹配当前的开头。无论如何,它在第一个字符之前匹配。

同样,$匹配字符串(或行)的末尾;更准确地说,它在终止换行之前匹配,如果有的话。

因此,^$仅当字符串/行的开头和字符串/行的结尾之间没有字符时才匹配。

于 2012-05-19T20:18:34.977 回答
0

我正在假设您对此感到#困惑$

^$匹配一行的文字开头和文字结尾。不是最后一个字符或第一个字符。它不需要最后一个字符或第一个字符即可工作。

你为什么要这个?好吧,假设您有几行很长的行,并且您想在每行的末尾添加文本。您可以执行替换搜索$并将其替换为“Bork Bork Bork”(例如,如果您正在制作 encheferizer)。或者您可以通过使用找到逗号分隔列表的最后一个成员[^,]+$

您也可以使用^$您提到的搜索表达式来匹配空行,或者您可以通过搜索或其他方式确保行上没有任何非法字符^[\w\d]*$

于 2012-05-19T20:19:47.367 回答