Что такое регулярное выражение для соответствия символу новой строки?


22

В регулярном выражении Emacs \nне соответствует символу новой строки \n.

  1. Правильно ли я, что $соответствует позиции между символом новой строки и символом прямо перед символом новой строки. например, для строки abc\n, $соответствует позиции между cи \n?
  2. Какое регулярное выражение соответствует \n?

2
Не могли бы вы привести минимальный рабочий пример? Может быть, я что-то упустил, но (re-search-forward "\n")у меня отлично работает.
Дан

1
Ваш файл может использовать \ r \ n для новых строк, и может быть, вам нужно включить \ r в регулярное выражение, поэтому abc\r\nвместо abc\n.
Джордон Биондо

@Dan: CM и Mx совпадают \nс n. мой буфер находится в фундаментальном режиме. Это происходит с любым текстом, поэтому любой текст с новой строкой или буквой nявляется рабочим примером
StackExchange for All

@Jordon: CMs и Mx происходит как матч \r\nкrn
StackExchange для Всех

@Tim, да, потому что, если вы вводите их в интерактивном режиме, вам нужно сделать вставки в кавычках, Cq Cm и Cq Cj соответственно. Вы можете ввести \ r \ n, если вводите их в строку lisp.
Джордон Биондо

Ответы:


19
  1. Да. $соответствует концу строки , а не символу новой строки, который следует после конца строки.
  2. Есть C-M-s C-q C-j. C-qявляется связыванием по умолчанию quoted-insertи работает в минибуфере тоже. Это выражение буквально ищет символ новой строки: C-j.

1
2. Вы говорите, что символ новой строки не может быть представлен как escape-последовательность в регулярном выражении Emacs?
StackExchange для всех

3
Будь то поиск новой строки в интерактивном режиме или через elisp (например, (looking-at "^J")где вставляется ^ JC-q C-j ), этот C-q C-jподход всегда работает. Но при использовании функций elisp looking-at \nтоже самое работает; M-: (looking-at "\n") RETбудет иметь значение true, если курсор находится в конце строки (и после этого есть новая строка).
Каушал Моди

2
Просто упомяните, если regexp-builderвы используете , вы можете распознать новую строку с [\n].
Nsukami _

@Nsukami_: CMs и Mx происходит как матч [\n]с n.
StackExchange для всех

13

Как комментирует Дэн, регулярное выражение, которое соответствует новой строке, является новой строкой.

Вы можете представить новую строку в строке в кавычках в elisp как "\n". Для этого не существует специального дополнительного синтаксиса, специфичного для регулярных выражений - вы просто используете новую строку, точно так же, как любой другой буквенный символ.

Если вы вводите регулярное выражение в интерактивном режиме, вы можете вставить новую C-qC-jстроку с помощью , как указывает ответ kaushalmodi.


1
Благодарность! В emacs (не в elisp) Cq Cj - единственный способ сопоставить символ новой строки? \nне соответствует символу новой строки.
StackExchange для всех

1
Да. Более конкретно, ввод новой строки - это единственный способ сопоставить символ новой строки при интерактивном вводе регулярного выражения (так как для новой строки нет escape-последовательности регулярного выражения), и C-q C-jэто самый надежный способ ввода новой строки в командной строке.
Фил
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.