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

22

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

  1. Правильно ли я, что $соответствует позиции между символом новой строки и символом прямо перед символом новой строки. например, для строки abc\n, $соответствует позиции между cи \n?
  2. Какое регулярное выражение соответствует \n?
StackExchange для всех
источник
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.

Phils
источник
1
Благодарность! В emacs (не в elisp) Cq Cj - единственный способ сопоставить символ новой строки? \nне соответствует символу новой строки.
StackExchange для всех
1
Да. Более конкретно, ввод новой строки - это единственный способ сопоставить символ новой строки при интерактивном вводе регулярного выражения (так как для новой строки нет escape-последовательности регулярного выражения), и C-q C-jэто самый надежный способ ввода новой строки в командной строке.
Фил