Що таке регулярний вираз, щоб відповідати символу нового рядка?


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 для всіх

@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та працює і в minibuffer. Цей вислів буквально шукає символ нового рядка: C-j.

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

3
Незалежно від того, чи шукати новий рядок інтерактивно чи через elisp (наприклад, (looking-at "^J")де ^ J вставлено C-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". Для цього немає спеціального додаткового синтаксису, який відповідає специфічним для regexp, ви просто використовуєте новий рядок, точно як і будь-який інший буквальний символ.

Якщо ви інтерактивно вводите регулярний параметр, тоді ви можете вставити новий рядок C-qC-j, як вказує відповідь каушалмоді.


1
Спасибі! Чи є Cq Cj у emacs (не в elisp) єдиний спосіб відповідати новому символу рядка? \nне відповідає новому символу рядка.
StackExchange для всіх

1
Так. Ну, точніше, введення нового рядка - це єдиний спосіб зіставити символ нового рядка при інтерактивному введенні регулярного перегляду (оскільки немає послідовності запуску regexp для нового рядка), і C-q C-jє найнадійнішим способом набору нового рядка під запитом.
філс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.