PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei regex



Waxolunist
05-09-2006, 09:29
Hallo

Ich werke jetzt schon einige Zeit an einer Regex herum und komm nicht recht drauf:

Ich muss eine HTML-Seite mit mehreren Selectboxen auslesen. Jene die ich benötige, hat folgendes Aussehen:


<select name="role" class="font">
<option value="75|michi/W_A_L_T_E_R___AllesInWurzel/WURZL_wurzelbezeichnung">michi/W_A_L_T_E_R___AllesInWurzel/WURZL_wurzelbezeichnung</option>
<option value="84|michi/michiAllesinVO/VO001_VO001">michi/michiAllesinVO/VO001_VO001</option>
<option value="78|michi/W_A_L_T_E_R alles in VST/VST01_VST01">michi/W_A_L_T_E_R alles in VST/VST01_VST01</option>
<option value="80|michi/PortalTest/WURZL_wurzelbezeichnung">michi/PortalTest/WURZL_wurzelbezeichnung</option>
<option value="24|michi/allesInVST-1/VST01_VST01">michi/allesInVST-1/VST01_VST01</option>
<option value="86|michi/neu/WURZL_wurzelbezeichnung">michi/neu/WURZL_wurzelbezeichnung</option>
<option value="66|michi/EPARecht/WURZL_wurzelbezeichnung">michi/EPARecht/WURZL_wurzelbezeichnung</option>
<option value="22|michi/michiWurzel/WURZL_wurzelbezeichnung">michi/michiWurzel/WURZL_wurzelbezeichnung</option>

</select>

Der Name ist role.
Danach folgen beliebig viele, aber mindestens eine option. Den Wert von Value brauche ich.

Soweit bin ich schon mal gekommen:

role.*\s*.*value."(.+?)"

Damit erhalte ich
75|michi/W_A_L_T_E_R___AllesInWurzel/WURZL_wurzelbezeichnung

Damit liest er die erste option heraus. Aber wie bekomme ich die anderen noch in subgroups?

mfg, Christian

Romanday
06-09-2006, 05:43
<select name="role" class="font">
<option value="75|michi/W_A_L_T_E_R___AllesInWurzel/WURZL_wurzelbezeichnung">michi/W_A_L_T_E_R___AllesInWurzel/WURZL_wurzelbezeichnung</option>
<option value="84|michi/michiAllesinVO/VO001_VO001">michi/michiAllesinVO/VO001_VO001</option>
<option value="78|michi/W_A_L_T_E_R alles in VST/VST01_VST01">michi/W_A_L_T_E_R alles in VST/VST01_VST01</option>
<option value="80|michi/PortalTest/WURZL_wurzelbezeichnung">michi/PortalTest/WURZL_wurzelbezeichnung</option>
<option value="24|michi/allesInVST-1/VST01_VST01">michi/allesInVST-1/VST01_VST01</option>
<option value="86|michi/neu/WURZL_wurzelbezeichnung">michi/neu/WURZL_wurzelbezeichnung</option>
<option value="66|michi/EPARecht/WURZL_wurzelbezeichnung">michi/EPARecht/WURZL_wurzelbezeichnung</option>
<option value="22|michi/michiWurzel/WURZL_wurzelbezeichnung">michi/michiWurzel/WURZL_wurzelbezeichnung</option>

</select>

Aber wie bekomme ich die anderen noch in subgroups?

mfg, Christian


Die Aufgabe ist mit einem REGEX nicht zu lösen.
Nimm die preg funktionen von PHP, und Du wirst sehen wie einfach das damit geht.

Tip: Formular Elemente in HTML noch 1x anschauen, und Select Box umbauen.
(Alles doppelt gemoppelt und gehoppelt.)

michael.sprick
06-09-2006, 09:11
In welcher Sprache machst Du das denn?

In Perl brauchst Du die Regexp eigentlich nur im Listenkontext aufzurufen. Da würde ich dann der Einfachheit halber mit zwei Ausdrücken arbeiten.




# betroffenen HTML Code separieren:
$HTML =~ /<select\s+name="role"\s+class="font">(.*?)<\/select>/is;
my $Selectbox = $1;

# alle values der option-Tags finden:
my @matches = $Selectbox =~ /value="([^"]*)/igs;


foreach(@matches)
{
print "$_\n";
}


viel Spaß, Michael

Waxolunist
06-09-2006, 13:54
Es geht um Lasttests mit JMeter.

Einzelne Attribute kann man auswählen mit einer einzelnen regex. Aber das ist somit wohl eher nicht lösbar.

Wie gesagt, ich habe es jetzt einmal so gelöst, dass ich nur die erste Berechtigung heranziehe.

Thx, aber für eure Hilfe.

@Romanday: Da ist nicht alles doppelt gemoppelt. Denn der value ist mit einer vorangestellten ID. Danach wird nur der Name der role angezeigt.
Es könnte natürlich nur mit der ID auch gehen, aber dann bräuchte ich noch mehr Parameter, denn die Applikation ist Mehrmandantenfähig. Es passt also so schon wie es ist.