2 votes

Essayer de sélectionner une partie spécifique d'une chaîne de caractères avec regex

J'ai essayé et essayé encore de trouver une regex pour ce modèle. J'ai une chaîne comme celle-ci, extraite de la source HTML.

<!-- TAG=Something / Something else -->

Et parfois, c'est juste :

<!-- TAG=Something -->

Dans les deux cas, je veux que l'expression rationnelle corresponde à "quelque chose", c'est-à-dire à tout ce qui se trouve entre TAG= et un / facultatif.

Ma première tentative a été :

TAG=(.*)[/]?(.*) -->

Mais la première parenthèse correspond à tout ce qui se trouve entre TAG= et -->, quoi qu'il arrive. Quelle est donc la méthode correcte ?

2voto

Alin Purcaru Points 21373

Essayez ça :

TAG=([^/]*)(?:/(.*))?-->

Le groupe 1 contiendra "quelque chose".
Le groupe 2 contiendra "Quelque chose d'autre" ou null.

Testez-le.

2voto

Gabi Purcaru Points 15158
<!--.*?=(.*?)(-->|/)

Il correspond à tout ce dont vous avez besoin.

1voto

Mark Byers Points 318575

Utiliser un modificateur non gourmand ? :

TAG=(.*?)[/]?.* -->

De même, votre utilisation de [/] semble inhabituel - vous n'avez pas besoin d'une classe de caractères pour écrire un seul caractère. L'explication la plus probable de cette syntaxe inhabituelle est probablement que vous utilisez / comme délimiteur de l'expression régulière, ce qui signifie que / est traité comme un caractère spécial. Dans de nombreux dialectes regex (pas tous), il est possible de résoudre ce problème en utilisant un délimiteur différent, tel que # . Cela vous évite d'avoir à échapper les barres obliques.

Prograide.com

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.

Powered by:

X