J'ai une chaîne qui couvre plusieurs lignes. J'ai besoin d'extraire le texte entre deux cordes. Par exemple: J'ai besoin d'extraire la chaîne, Comment puis-je aller Ceci? P> p> Démarrer ici un exemple de texte couvrant quelques lignes. CODE> P>
3 Réponses :
Utilisez le modificateur ceci capturera jusqu'au dernier em> Si ce n'est pas ce que vous voulez, vous pouvez utiliser: p> / S CODE> REGEX pour traiter le
blockQuote>
terminer ici code>, au cas où il apparaît plus d'une fois dans votre texte. p>
$string =~ /(Start Here.*?)End Here/s;
print $1;
Vous utilisez également le match gourmand, donc si quelqu'un a quelque chose qui dit ... "Démarrer Blah Blah End Blah Blah Start Blah Blah end", il capturera les deux séquences de démarrage / fin. Si vous utilisez . *? Code> au lieu de cela, vous vous limiterez à un match à la fois.
Ne fonctionne pas pour moi: echo -e "test1 \ ntest2"> test && perl -ne 'imprimer $ _ si /test1.*test2/s' test code> n'empête rien.
@ Hi-ange qui est une question connexe différente sur l'utilisation du drapeau -N code>, qui est principalement répondu à ligne de commande Perl Multi -line remplace --- (Cependant, si ce n'est pas le cas, il convient de poser une nouvelle question) i>
@ user202729 Merci d'avoir effacé la confusion, je viens de l'essayer, travaille pour moi. Ensuite: il semble que Perl "traite tout le texte en tant que ligne unique" a une utilité limitée, car elle correspond à tout le texte ou une seule correspondance d'un groupe. Par exemple: écho -e "test1 \ ntest2 \ ntest3 \ ntest2 \ ntest2"> test && perl -0777 -ne 'print 1 $ IF / (test1 \ ntest2) /' Test code> donne "Test1 \ Ntest2 "Sortie juste une fois. Utilisation de
^ code> et
$ code> n'est pas possible. Je verrai si je trouve le temps de signaler une demande de fonctionnalité pour un support multiligne approprié, comme les expulsions d'Emacs.
print $1 if /(Start Here.*?)End Here/s;
ne serait-il pas le modificateur correct pour traiter la chaîne comme une seule ligne soit (? S) plutôt que (/ s)? Je luttais avec un problème similaire depuis un moment et que le testeur REGEXP incorporé dans les résultats de la vue de Jmètre Afficher les résultats de l'arborescence montre mon extracteur d'expression régulier avec le regex correspondant p> < Pré> xxx pré> pendant que la regex p> ne correspond pas. D'autres testeurs de regex montrent le même résultat. Cependant, lorsque j'essaie d'exécuter un script, j'obtiens l'erreur d'assertion BeanShell: P> Message de défaillance d'affirmation: org.apache.jorphane.util.jmetrexception: Erreur lors de l'appel de la méthode BSH: Eval Source Fichier: Évaluation en ligne de: `Import Import Java.io. *; // Ecrivez les résultats des données à une tenue de fichier = "/ users / dani... '' '' '' '' '' '' Erreur d'analyse de jeton: Erreur lexicale à la ligne 12, Colonne 380. Rencontré:" \ n "(10), P>
BlockQuote> Alors quelque chose d'autre est définitivement tort avec le mien. Quoi qu'il en soit, juste une suggestion p> p>