2009-08-07 6 views
0

je dois extraire des lignes de code suivantesproblème en utilisant regex pour extraire le texte

<label for="<%=foobar.bar %>">Password:</label> 

<label for="foobar">Password:</label> 

Je dois extraire foobar, je peux utiliser ceci: (?<=for=")[^"]+(?=(")) pour extraire:

<%=foobar.bar %> 

et

foobar 

mais je ne veux pas <%= ou .bar et si j'essaie de créer (?<=for=")[^"]+(?=(")) | (?<=for="<%=)[^"]+(?=(")) cela ne fonctionne pas parce que l'étiquette qui a inclus <%= répond aux deux conditions et je ne pense pas que vous pouvez utiliser XOR? Est-ce quelque chose que n'importe qui peut m'aider?

Merci :)

Répondre

1

Je crois qu'il est préférable de ne pas créer uber-regexes. Faites votre tâche en plusieurs étapes:

  1. Extrait <%=foobar.bar %> ou foobar avec votre regex (?<=for=")[^"]+(?=("))
  2. Vérifiez si le résultat correspond regex comme <%=([\w]+)\.bar\s*%>.
  3. S'il utilise $1 groupe de correspondance, utiliser autrement résultat de l'étape 2.
  4. Vous obtenez foobar
+0

merci, je (? <= Pour = \ ") [^ \"] + (? = (\ ")) et a ensuite utilisé: (? <= <% = \ s *) [^ \ s] + (? = \ .bar \ s *%>) – Sara

0

Vous pouvez essayer ceci:

(?<for="(<%=)?)[^" ]*(?=(%>)?") 

En supposant que ce que vous voulez capturer ne comprend jamais des espaces. Sinon, vous pouvez essayer:

(?<for="(<%=)?)[^"]*?(?=(%>)?") 

Pour utiliser une forme non avide de [^"]*

Questions connexes