2011-02-02 6 views
1

J'ai besoin d'une aide pour l'expression régulière car je n'y ai pas une bonne connaissance.Texte de correspondance d'expression régulière entre les balises

Je expression régulière comme: (.? +)

Regex myregex = new Regex("testValue=\"(.+?)\""); 

Qu'est-ce que indique?

La chaîne qu'il correspond est "testValue=123e4567" et renvoie 123e4567 en sortie.

Maintenant, j'ai besoin d'aide dans l'expression régulière pour faire correspondre une chaîne "<helpMe>123e4567</helpMe>" où j'ai besoin de 123e4567 en sortie. Comment est-ce que j'écris une expression régulière pour cela?

Répondre

4

Cela signifie:

( Begin captured group 
. Match any character 
+ One or more times 
? Non-greedy quantifier 
) End captured group 

Dans le cas de votre regex, le quantificateur non gourmand ? signifie que votre groupe capturé commencera après le premier guillemet, puis terminer immédiatement avant le lendemain deux -quote rencontre. S'il était gourmand (sans le ?), le groupe s'étendrait jusqu'au même dernier double-citation qu'il rencontre sur cette ligne (c.-à-d., "Gourmand" consommant autant de la ligne que possible).

Pour votre exemple "HelpMe", vous voulez ce regex:

<helpMe>(.+?)</helpMe> 

Compte tenu de cette chaîne:

<div>Something<helpMe>ABCDE</helpMe></div> 

Vous obtiendrez ce match:

ABCDE 

La valeur du quantificateur non-gourmand est évidente dans cette variation:

Regex: <helpMe>(.+)</helpMe> 
String: <div>Something<helpMe>ABCDE</helpMe><helpMe>FGHIJ</helpMe></div> 

La capture gourmande ressemblerait à ceci:

ABCDE</helpMe><helpMe>FGHIJ 

Il y a des outils interactifs utiles pour jouer avec ces variations:

+0

Merci :) Maintenant, j'ai la sortie –

+0

Regex myregex = new Regex (" (. +?)") TRAVAILLÉ !! :) –

+0

Je suis content que vous l'ayez réglé. –

0

Que signifie (. +?)?

Cela signifie correspond à tout caractère (.) Un

fois ou plus (+?) Une expression régulière simple à correspondre à votre deuxième chaîne serait

<helpMe>([a-z0-9]+)<\/helpMe> 

Cela correspond à tout caractère de a-z et any digit à l'intérieur de <helpme> et </helpMe>.

Les pharanteses sont utilisées pour capturer un groupe. Ceci est utile si vous avez besoin de référencer la valeur dans ce groupe plus tard.

2

Ken Redler a un great answer concernant votre première question. Pour le deuxième essai de question:

<(helpMe)>(.*?)</\1> 

En utilisant les back reference\1 vous pouvez trouver des valeurs entre l'ensemble des balises correspondant. Le premier groupe trouve le nom du tag, le deuxième groupe le contenu lui-même et la référence arrière \1 réutilise la correspondance du premier groupe (dans ce cas, le nom du tag).

De même, en C#, vous pouvez utiliser des groupes nommés, tels que: <(helpMe)>(?<value>.*?)</\1>match.Groups["value"].Value contient maintenant votre valeur.

+0

+1 pour la référence arrière. Utile pour le cas de l'OP. –

Questions connexes