2009-08-07 4 views
0

ich aus den folgenden CodezeilenProblem regex Text zu extrahieren

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

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

Ich brauche extrahieren müssen foobar zu extrahieren, ich diese verwenden: (?<=for=")[^"]+(?=(")) zu extrahieren:

<%=foobar.bar %> 

und

foobar 

aber ich möchte nicht <%= oder .bar und wenn ich versuche, (?<=for=")[^"]+(?=(")) | (?<=for="<%=)[^"]+(?=(")) zu erstellen funktioniert es nicht, weil das Etikett, das <%= enthielt, beide Bedingungen erfüllt, und ich glaube nicht, dass Sie XOR verwenden können? Kann mir irgendjemand dabei helfen?

Merci :)

Antwort

1

Ich glaube, zu verwenden, dass es besser ist, nicht uber-Regexes zu erstellen. Tun Sie Ihre Aufgabe in mehreren Schritten:

  1. Extract <%=foobar.bar %> oder foobar mit Ihrem regex (?<=for=")[^"]+(?=("))
  2. Überprüfen Sie, ob Ergebnis regex wie <%=([\w]+)\.bar\s*%> übereinstimmt.
  3. Ist dies der Fall verwenden $1 Gruppe von Spiel, sonst Ergebnis von Schritt verwenden 2.
  4. Sie erhalten foobar
+0

danke, habe ich (? <= Für = \ ") [^ \"] + (? = (\ ")) und fuhr dann fort mit: (? <= <% = \ s *) [^ \ s] + (? = \. bar \ s *%>) – Sara

0

Sie können dies versuchen:

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

dass Unter der Annahme, was Sie nie Leerzeichen enthält erfassen möchten. Ansonsten können Sie versuchen:

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

Um eine nicht gierige Form von [^"]*