Exemple : "C'est juste \na une simple phrase".
Je veux faire correspondre chaque caractère entre "Ceci est" et "phrase". Les sauts de ligne doivent être ignorés. Je n'arrive pas à trouver la syntaxe correcte.
Exemple : "C'est juste \na une simple phrase".
Je veux faire correspondre chaque caractère entre "Ceci est" et "phrase". Les sauts de ligne doivent être ignorés. Je n'arrive pas à trouver la syntaxe correcte.
Par exemple
(?<=This is)(.*)(?=sentence)
J'ai utilisé lookbehind (?<=)
et regarder vers l'avenir (?=)
afin que "Ceci est" et "phrase" ne soient pas inclus dans la correspondance, mais cela dépend de votre cas d'utilisation, vous pouvez aussi simplement écrire This is(.*)sentence
.
L'important ici est que vous activiez le mode "dotall" de votre moteur de regex, de sorte que la balise .
correspond à la nouvelle ligne. Mais la manière de procéder dépend de votre moteur de regex.
La prochaine chose est que si vous utilisez .*
ou .*?
. Le premier est gourmand et correspondra jusqu'à la dernière "phrase" de votre chaîne, le second est paresseux et correspondra jusqu'à la prochaine "phrase" de votre chaîne.
Mise à jour
This is(?s)(.*)sentence
Où le (?s) active le modificateur dotall, ce qui fait de l'élément .
correspondant aux caractères de nouvelle ligne.
Mise à jour 2 :
(?<=is \()(.*?)(?=\s*\))
correspond à votre exemple "Ceci est une phrase (simple)". Voir ici Regexr
@tchrist, désolé, j'ai dû vérifier. Est-ce que je comprends bien et This is(?s)(.*)sentence
fonctionnerait ?
@stema : Oui, cela devrait fonctionner pour activer le mode "dot all" sous la plupart des bibliothèques regex.
Cela a en grande partie résolu mon problème, mais comment inclure un caractère d'espace blanc dans mon motif ? J'ai essayé ce qui suit : "(.* ?)( ))" pour faire correspondre le " )" à la fin d'une séquence, mais cela n'a pas fonctionné.
Je ressuscite cette question parce que le regex dans la réponse acceptée ne me semble pas tout à fait correct. Pourquoi ? Parce que
(?<=This is)(.*)(?=sentence)
correspondra à my first sentence. This is my second
sur This is my first sentence. This is my second sentence.
Vous avez besoin d'un quantificateur paresseux entre les deux solutions de rechange. L'ajout d'un ?
rend l'étoile paresseuse.
Cela correspond à ce que vous voulez :
(?<=This is).*?(?=sentence)
Voir la démo . J'ai supprimé le groupe de capture, qui n'était pas nécessaire.
Le mode DOTALL permet de faire correspondre des lignes brisées.
Notez que dans la démo, le mode "dot matches line breaks mode" (alias) dot-all est activé (cf. comment activer DOTALL dans différentes langues ). Dans de nombreuses saveurs de regex, vous pouvez le définir avec le modificateur en ligne (?s)
en transformant l'expression en :
(?s)(?<=This is).*?(?=sentence)
Référence
Vous avez raison au sujet du groupe de capture. Je ne sais pas pourquoi j'ai fait cela. Mais la différence entre .*
y .*?
est également expliqué dans ma réponse (le paragraphe avant "Mise à jour"). Je ne pense donc pas que ma réponse soit incorrecte.
@stema Désolé de pinailler, en parcourant certaines de vos réponses hier, c'est la seule qui m'a fait tiquer :) J'ai adouci la première ligne de is incorrect
à doesn't seem quite correct to me
... J'espère que cela ne fait pas vous twitch, probablement juste une différence de perception sur ce que devrait être le regex pour une réponse à fort trafic.
J'aime la simplicité, mais ce n'était pas suffisant pour moi. Ce que je veux dire, "This is just\na simple sentence".match(/This is (.*?) sentence/)
a retourné null
. "This is just\na simple sentence".match(/This is (.*?) sentence/s)
a donné un résultat utile. La différence est le DOTALL s
après la barre oblique finale.
Je ne sais pas pourquoi tous les votes positifs, cela permet des sauts de ligne de 0 à 1, et le saut de ligne doit être immédiatement précédé de endstringname
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
15 votes
Vous pourriez vouloir indiquer dans quel environnement vous utilisez Regex. Il peut y avoir des différences en fonction de ce que vous entendez exactement par "ignorer" les sauts de ligne.