匹配换行符的正则表达式是什么?


22

在Emacs regex中,\n与换行符不匹配\n

  1. 我是否正确$匹配了换行符和换行符之前的字符之间的位置。例如,对于一个字符串abc\n$匹配之间的位置c\n
  2. 匹配的正则表达式是\n什么?

2
您能否提供一个最低限度的工作示例?也许我错过了一些东西,但是(re-search-forward "\n")对我来说很好。

1
您的文件可能在新行中使用\ r \ n,并且可能需要在正则表达式中包含\ r,abc\r\n而不是abc\n
Jordon Biondo

@丹:CM和发生的Mx都匹配\nn。我的缓冲区处于基本模式。任何文本都会发生这种情况,因此任何带有新行或字母的文本n都是有效的示例
StackExchange for All

@乔丹:CM和Mx都匹配\r\nrn
StackExchange for All

@Tim,是的,因为如果要以交互方式输入它们,则需要分别进行加引号的插入Cq Cm和Cq Cj。如果将它们输入一个Lisp字符串中,则可以输入\ r \ n。
Jordon Biondo

Answers:


19
  1. 是。$匹配行尾,而不匹配尾后的换行符。
  2. C-M-s C-q C-jC-q是默认绑定,quoted-insert也可以在微型缓冲区中使用。该表达式从字面上搜索换行符:C-j

1
2.您是说换行符不能在Emacs regex中表示为转义序列吗?
2015年

3
是否交互或经由elisp的搜索换行符(例如(looking-at "^J"),其中道^ J由插入C-q C-j),则C-q C-j方法总是工作。但是,当使用类似elisp的函数时,同样looking-at \n也可以使用;M-: (looking-at "\n") RET如果光标位于该行的末尾(并且此后还有一个换行符),则它将等于true。
Kaushal Modi 2015年

2
只需提及,如果使用regexp-builder,您就可以使用识别新行[\n]
Nsukami _

@Nsukami_:CM和发生的Mx都匹配[\n]n
2015年

13

正如Dan所评论的,与换行符匹配的正则表达式换行符。

您可以将elisp中带引号的字符串中的换行符表示为"\n"。对此没有特殊的正则表达式专用语法-您只需使用换行符即可,就像其他文字字符一样。

如果您以交互方式输入正则表达式,则可以使用插入换行符C-qC-j,因为kaushalmodi的答案指出了这一点。


1
谢谢!在emacs中(不是在elisp中),Cq Cj是匹配换行符的唯一方法吗?\n与换行符不匹配。
2015年

1
是。好吧,更具体地说,键入换行符是交互式输入正则表达式时匹配换行符的唯一方法(因为换行没有正则表达式转义序列),并且C-q C-j是在提示符下键入换行符的最可靠方法。
phils 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.