J'essaie de faire correspondre la ligne From
jusqu'à la fin de la ligne Subject
comme suit:
....
From: XXXXXX
Date: Tue, 8 Mar 2011 10:52:42 -0800
To: XXXXXXX
Subject: XXXXXXX
....
Jusqu'à présent, j'ai:
/From:.*Date:.*To:.*Subject/m
Mais cela ne correspond pas à la fin de la ligne d'objet. J'ai essayé d'ajouter $
mais cela n'a eu aucun effet.
Vous pouvez utiliser le /m
modificateur pour activer le mode multiligne (c'est-à-dire pour autoriser .
pour faire correspondre les sauts de ligne) et vous pouvez utiliser ?
pour effectuer une correspondance non gourmande:
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"
Voir http://Ruby-doc.org/core/Regexp.html et recherchez "mode multiligne" et "gourmand par défaut".
Si vous utilisez Ruby, vous pouvez essayer:
Regexp.new("some reg", Regexp::MULTILINE)
Si vous n'utilisez pas Ruby, je vous suggère de pirater cette question:
Si vous souhaitez faire correspondre les sauts de ligne, une possibilité consiste à remplacer d'abord tous les caractères de nouvelle ligne par un autre caractère (ou séquence de caractères) qui n'apparaîtrait pas autrement dans le texte. Par exemple, si vous avez tout le texte dans une variable de chaîne, vous pouvez faire quelque chose comme aString.split("\n").join("|")
pour remplacer tous les retours à la ligne par des caractères de canal.
Regardez également réponse d'Alan Moore à votre question précédente sur la façon de faire correspondre le caractère de nouvelle ligne dans une expression régulière.
Essayer:
/...^Subject:[^\n]*/m
En utilisant les données suivantes:
From: XXXXXX
Date: Tue, 8 Mar 2011 10:52:42 -0800
To: XXXXXXX
Subject: XXXXXXX
Le regex suivant fera la magie:
From:([^\r\n]+)[\r\n]+Date:([^\r\n]+)[\r\n]+To:([^\r\n]+)[\r\n]+Subject:([^\r\n]+)[\r\n]+
Mais je vous recommande de ne pas essayer de le faire en 1 regex. Poussez dans une expression régulière "^ (\ w +): (. +) $" Ligne par ligne, sauf si vous êtes sûr que la séquence de FROM/DATE/TO/SUBJECT ne va pas changer;)