regulares regular how expressions expresiones examples create ruby regex rubular

ruby - regular - Regex, ¿cómo hacer coincidir varias líneas?



ruby regex match (5)

Puede usar el modificador /m para habilitar el modo multilínea (es decir, para permitir que coincida con las líneas nuevas), y puede usarlo ? para realizar un emparejamiento no codicioso:

message = <<-MSG Random Line 1 Random Line 2 From: [email protected] Date: 01-01-2011 To: [email protected] Subject: This is the subject line Random Line 3 Random Line 4 MSG message.match(/(From:.*Subject.*?)/n/m)[1] => "From: [email protected]/nDate: 01-01-2011/nTo: [email protected]/nSubject: This is the subject line"

Consulte http://ruby-doc.org/core/Regexp.html y busque "modo multilínea" y "codicioso de forma predeterminada".

Estoy tratando de hacer coincidir la línea From todo el camino hasta el final de la línea Subject en lo siguiente:

.... From: XXXXXX Date: Tue, 8 Mar 2011 10:52:42 -0800 To: XXXXXXX Subject: XXXXXXX ....

Hasta ahora tengo:

/From:.*Date:.*To:.*Subject/m

Pero eso no coincide con el final de la línea de asunto. Traté de agregar $ pero eso no tuvo ningún efecto.


Si desea hacer coincidir los saltos de línea, una posibilidad es reemplazar primero todos los caracteres de nueva línea con algún otro carácter (o secuencia de caracteres) que de otro modo no aparecería en el texto. Por ejemplo, si tiene todo el texto en una variable de cadena, puede hacer algo como aString.split("/n").join("|") para reemplazar todas las líneas nuevas con caracteres de tubería.

Además, observe la respuesta de Alan Moore a su pregunta anterior sobre cómo hacer coincidir el carácter de nueva línea en una expresión regular.


Si está usando ruby, puede intentar:

Regexp.new("some reg", Regexp::MULTILINE)

Si no estás usando ruby, te sugiero que hackes esta pregunta:

  1. reemplace todo el "/ n" con SOME_SPECIAL_TOKEN
  2. busca la expresión regular y realiza otras operaciones ...
  3. restaurar: reemplaza SOME_SPECIAL_TOKEN con "/ n"

Tratar:

/...^Subject:[^/n]*/m


Usando los siguientes datos:

From: XXXXXX Date: Tue, 8 Mar 2011 10:52:42 -0800 To: XXXXXXX Subject: XXXXXXX

La siguiente expresión regular hará la magia:

From:([^/r/n]+)[/r/n]+Date:([^/r/n]+)[/r/n]+To:([^/r/n]+)[/r/n]+Subject:([^/r/n]+)[/r/n]+

Pero recomendaría que no intentes hacer esto en 1 expresión regular. Presione en una expresión regular "^ (/ w +): (. +) $" Línea por línea, a menos que esté seguro de que la secuencia de FROM / DATE / TO / SUBJECT no va a cambiar;)