Mon motif d'expression régulière ressemble à quelque chose comme
<xxxx location="file path/level1/level2" xxxx some="xxx">
Je ne suis intéressé que par la partie des devis affectés à l'emplacement. Cela ne devrait-il pas être aussi simple que ci-dessous sans le commutateur gourmand?
/.*location="(.*)".*/
Ne semble pas fonctionner.
Réponses:
Vous devez rendre votre expression régulière non gourmande, car par défaut,
"(.*)"
elle correspondra à tout"file path/level1/level2" xxx some="xxx"
.Au lieu de cela, vous pouvez rendre votre point-star non gourmand, ce qui le fera correspondre le moins de caractères possible:
L'ajout d'un
?
sur un quantificateur (?
,*
ou+
) le rend non gourmand.la source
.*?
être.\{-}
pour une correspondance non gourmande.location="(.*)"
correspondra de l '"aprèslocation=
au" après,some="xxx
sauf si vous le rendez non gourmand. Donc, vous devez soit.*?
(c'est-à-dire le rendre non gourmand) ou mieux remplacer.*
par[^"]*
.la source
.*?
notation est plus générale que[^"]*
Que diriez-vous
Cela évite la recherche illimitée avec. * Et correspond exactement à la première citation.
la source
Utilisez une correspondance non gourmande, si votre moteur le prend en charge. Ajouter le ? à l'intérieur de la capture.
la source
L'utilisation de quantificateurs paresseux
?
sans indicateur global est la réponse.Par exemple,
Si vous aviez alors le drapeau global
/g
, il aurait correspondu à toutes les correspondances de longueur la plus faible comme ci-dessous.la source
Parce que vous utilisez un sous- motif quantifié et comme décrit dans Perl Doc ,
Ainsi, pour permettre à votre modèle quantifié de faire une correspondance minimale, suivez-le en
?
:la source
Voici une autre façon.
Voici celui que vous voulez. C'est paresseux
[\s\S]*?
Le premier élément:
[\s\S]*?(?:location="[^"]*")[\s\S]*
remplacer par:$1
Explication : https://regex101.com/r/ZcqcUm/2
Pour être complet, ceci obtient le dernier. C'est gourmand
[\s\S]*
Le dernier élément:
[\s\S]*(?:location="([^"]*)")[\s\S]*
remplacer par:$1
Explication : https://regex101.com/r/LXSPDp/3
Il n'y a qu'une seule différence entre ces deux expressions régulières et c'est la
?
la source