¿Cuál es la expresión regular para que coincida con un personaje de nueva línea?

22

En Emacs regex, \nno coincide con un nuevo carácter de línea \n.

  1. ¿Es correcto que $coincida con la posición entre un nuevo carácter de línea y el carácter justo antes del nuevo carácter de línea? Por ejemplo, para una cadena abc\n, $coincide con la posición entre cy \n?
  2. ¿Cuál es la expresión regular que coincide \n?
StackExchange para todos
fuente
2
¿Podría proporcionar un ejemplo mínimo de trabajo? Tal vez me estoy perdiendo algo, pero (re-search-forward "\n")funciona bien para mí.
Dan
1
Su archivo puede usar \ r \ n para nuevas líneas y puede ser que necesite incluir \ r en su expresión regular, así que en abc\r\nlugar de abc\n.
Jordon Biondo
@Dan: los CM y Mx se corresponden \ncon ambos n. mi búfer está en modo fundamental. Esto le sucede a cualquier texto, por lo que cualquier texto con una nueva línea o letra nes un ejemplo de trabajo
StackExchange for All
@Jordon: CMs y Mx ocurren ambos coinciden \r\nconrn
StackExchange for All
@Tim, sí, porque si los ingresas de forma interactiva, deberías hacer un inserto entre comillas, Cq Cm y Cq Cj respectivamente. Podrías ingresar \ r \ n si los estuvieras ingresando en una cadena de lisp.
Jordon Biondo

Respuestas:

19
  1. Si. $coincide con el final de la línea , no con el carácter de nueva línea que viene después del final de la línea.
  2. Hacer C-M-s C-q C-j. C-qes el enlace predeterminado quoted-inserty también funciona en el minibúfer. Esta expresión, literalmente, busca una nueva línea: C-j.
Kaushal Modi
fuente
1
2. ¿Está diciendo que el nuevo carácter de línea no se puede representar como una secuencia de escape en Emacs regex?
StackExchange para todos
3
Ya sea que busque una nueva línea de forma interactiva o mediante elisp (por ejemplo, (looking-at "^J")donde se inserta ^ JC-q C-j ), el C-q C-jenfoque siempre funciona. Pero cuando se usan funciones elisp como las mismas looking-at \ntambién funciona; M-: (looking-at "\n") RETevaluará a verdadero si el cursor está al final de la línea (y hay una nueva línea después de eso).
Kaushal Modi
2
Solo para mencionar, si lo usa regexp-builder, puede reconocer una nueva línea con [\n].
Nsukami _
@Nsukami_: los CM y Mx se corresponden [\n]con ambos n.
StackExchange para todos
13

Como comenta Dan, la expresión regular que coincide con una nueva línea es una nueva línea.

Puede representar una nueva línea en una cadena entre comillas en elisp como "\n". No hay una sintaxis adicional específica de expresiones regulares adicionales para esto: solo usa una nueva línea, exactamente como cualquier otro carácter literal.

Si está ingresando una expresión regular de manera interactiva , puede insertar la nueva línea con C-qC-j, como señala la respuesta de kaushalmodi.

phils
fuente
1
¡Gracias! En emacs (no en elisp), ¿es Cq Cj la única forma de hacer coincidir un nuevo carácter de línea? \nno coincide con un nuevo carácter de línea.
StackExchange for All
1
Si. Bueno, más específicamente, escribir una nueva línea es la única forma de hacer coincidir un carácter de nueva línea al ingresar una expresión regular interactivamente (ya que no hay una secuencia de escape de expresión regular para una nueva línea), y C-q C-jes la forma más confiable de escribir una nueva línea en un mensaje.
phils