2016-11-26 3 views
1

ich drei Arbeits regex Muster bekam:kommen einige regex Muster (nicht einige str, irgendwelche Wörter, Datum)

^(sezon\s[0-9]+) => finds if string starts with sezon $$ where $is digit 
([a-zA-z]*|\b)*.* => that should match any words 
\d{1,2}[.]\d{1,2}[.]\d{2,4} => that matches date 

Jetzt möchte ich erste und das dritte Muster negieren und sie in die zweite verbinden.

Sezon 2 some text here 03.02.1203 => should be excluded 
Sezon more text => included 
Sezon 2 mote set amet => excluded 
some date here 20.20.2222 =>excluded 
only text here also => included 
    2 - => excluded 

Was ich versuche zu erreichen ist zu leugnen Strings mit:

  • Datum am Ende,
  • Sezon $ am Anfang
  • 1 - am Anfang

Rest (Sezon einige Text) (nur Text) sollte

akzeptiert werden

Jetzt kann ich 3 preg_matches machen und dann ihre Ausgaben in 'if' kombinieren, aber ich frage mich, ob es in einem Muster gemacht werden kann. Oder vielleicht ganz andere Idee?

Echt Zeichenfolge, die verwendet wird: sezon 1

1 - 
    Pilot (pilot) 
    26.10.2015 

2 - 
Stronger Together 
2.11.2015 
3 - 
Fight or Flight 
9.11.2015 

Linien werden unterbrochen durch Funktion explodieren. Für jede Zeile suche ich nach Jahreszeit, Nummer, Titel oder Datum und mache dann jeweils andere Sachen.

+2

Das zweite Muster ist völlig falsch, da es mit einer beliebigen Zeichenfolge übereinstimmt. –

+0

Ich würde sagen, dass Muster 2 auf '. *' Reduziert werden kann. –

+0

Es sollte mit jeder Textzeichenfolge zwischen anderen Sachen übereinstimmen. Deshalb möchte ich drei Muster zu einem verschmelzen – Mike

Antwort

1

Verwenden Sie ein negative lookahead:

'~^(?!\h*\d+\h*-‌|sezon\h+[0-9]+|.*\d{1,2}[.]\d{1,2}[.]\d{2,4}$).+~im' 

Siehe regex demo

Einzelheiten:

  • ^ - Beginn der Zeichenfolge
  • (?!\h*\d+\h*-‌|sezon\h+[0-9]+|.*\d{1,2}[.]\d{1,2}[.]\d{2,4}$) - ein negativer Look-Ahead, die das Spiel scheitern wenn ein String-Stern ts mit 0+ horizontalen Leerzeichen, 1 + Ziffern, 0+ Leerzeichen und - (siehe \h*\d+\h*-‌) oder beginnt mit sezon, 1+ Leerzeichen und 1 + Ziffern, oder (|) endet mit dem \d{1,2}[.]\d{1,2}[.]\d{2,4} Muster (da muss das Ende sein Zeichenkette danach - $)
  • .+ - 1 oder mehr Zeichen außer Zeilenumbruchzeichen.
+0

Siehe [eine Online-Demo] (http://ideone.com/IlGqNb) –

+0

Aktualisierte Frage. Eine weitere Sache kam, bevor ich testen konnte – Mike

+0

Bedeutet das, dass Sie eine Zeichenfolge mit mehreren Zeilenumbrüchen und Datensätze haben, die Sie extrahieren möchten? –

Verwandte Themen