正则表达式中的^#如何匹配空行?

时间:2012-05-19 19:59:42

标签: regex

我一直认为在正则表达式中,^和'像'动词'一样必须遵循一些东西, 例如^ a,line以a开头,或#a开头,而line end with a,但是^#对我来说,就像#在这种情况下不是'动词',就像a是动词的对象'^'< / p>

有人能给我一个更好的解释吗?

2 个答案:

答案 0 :(得分:1)

我在这里走出困境,我猜你真的想问为什么^$匹配空行。

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

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

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

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

答案 1 :(得分:0)

我的工作假设您将#$混为一谈

^$匹配一行的文字开头和字面结尾。不是最后一个角色或第一个角色。并且它不需要最后一个角色或第一个角色。

你为什么要这样?好吧,假设您有几条长行,并且想要在每条行的末尾添加文本。您可以执行替换搜索$并将其替换为“Bork Bork Bork”(例如,如果您正在制作加密器)。或者,您可以使用[^,]+$

找到逗号分隔列表的最后一个成员

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