Hilfe für RegEx gesucht
hawkmaster
- php
Hallo zusammen,
puhh die Reguläre Ausdrücke machen mich noch fertig :-)
Ich suche in einer Textdatei nach Text und zwar alles zwischen:
*OpenUI *MediaType/Media Type:PickOne
...
...
*CloseUI: *MediaType
Das Wort "MediaType" ist bekannt und steht in der Variablen $element.
Jetzt gibt es aber auch Stellen bzw. Dateien wo vor dem Wort "MediaType" noch zwei Buchstaben sind, also etwas "EFMediaType" oder "RXMediaType" etc.:
also:
*OpenUI *EFMediaType/Media Type:PickOne
...
...
*CloseUI: *EFMediaType
Jetzt würde ich gerne die Regex so abändern das es immer für beide Varianten funktioniert.
Ich habe jetzt versucht hinter dem "*" und vor $element das Suchmuster (.*?) zu setzen.
if (preg_match_all("#\OpenUI \(.*?)".$element."(/(.*?):|:) (.*?)\CloseUI: \(.*?)".$element."#s", $string1, $contents)){
print_r($contents);
if (preg_match_all("#\*(.*?)".$element." (.*?)/(.*?): {1,}"(.*?)"#s", $contents[0][0], $input)){
...
Jetzt wird zwar was gefunden aber das Ergebnis in $contents ist nun viel größer und enthält alles mögliche.
Mache ich was falsch?
Bin für jeden Rat dankbar.
vielen Dank und viele Grüße
hawk
Hi,
Jetzt gibt es aber auch Stellen bzw. Dateien wo vor dem Wort "MediaType" noch zwei Buchstaben sind, also etwas "EFMediaType" oder "RXMediaType" etc.:
also zwei optionale Großbuchstaben? Dafür schreibst Du dann ganz simpel: [A-Z]{0,2} (nicht ganz exakt, weil das auch auf einen einzelnen Buchstaben matched).
freundliche Grüße
Ingo
@@Ingo Turski:
Jetzt gibt es aber auch Stellen bzw. Dateien wo vor dem Wort "MediaType" noch zwei Buchstaben sind, also etwas "EFMediaType" oder "RXMediaType" etc.:
Sind mehrere solcher Dinger im Dokument? Reguläre Ausdrücke sind recht http://de.selfhtml.org/perl/sprache/regexpr.htm#gierig_genuegsam@title=gierig.
also zwei optionale Großbuchstaben? Dafür schreibst Du dann ganz simpel: [A-Z]{0,2} (nicht ganz exakt, weil das auch auf einen einzelnen Buchstaben matched).
(?:[A-Z]{2})?
Live long and prosper,
Gunnar
Hi,
(?:[A-Z]{2})?
stimmt, eine optionale Assertion ist natürlich genauer und landet auch nicht im Ergebnis.
freundliche Grüße
Ingo
Hallo ihr lieben Helfer,
vielen Dank für eure Tipps.
(?:[A-Z]{2})?
das sieht ja gut aus. Muss ich mal ausprobieren.
Was macht denn das ?: ganz am Anfang?
vielen Dank erstmal und viele Grüße
hawk
(Hallo|Hi(ho)|Nabend hawkmaster,
(?:[A-Z]{2})?
das sieht ja gut aus. Muss ich mal ausprobieren.
Was macht denn das ?: ganz am Anfang?
Es sorgt dafür, dass das Subpattern (alles was zwischen den runden Klammern steht) nicht in die interne Subpattern-Liste aufgenommen wird.
http://de.php.net/manual/de/regexp.reference.php (Suche nach der Überschrift "Subpatterns")
MffG
EisFuX