2017-04-25 6 views
0

Hallo Ich muss eine Zeichenfolge anpassen, die 0 + Bindestriche zwischen den Zeichen haben kann. Ich benutze PHP preg-match, um dies zu tun. Die Zeichen können Groß- oder Kleinbuchstaben sein. Hier ein paar Beispiele:Regex, um Zeichenkette mit keiner zu mehreren Bindestrichen zu entsprechen

TESTTESTtest published successfully 
test-TEST-test published successfully 
Test-test published successfully 

Meine Regex muss all diese verschiedenen Fälle erfassen.

Ich gehe Zeile für Zeile durch ein Protokoll und versuche, die Regex unten an jede Zeile anzupassen.

Dies ist meine aktuelle if-Anweisung:

if(preg_match('/(\w*) published successfully/',$line,$matches){ 

} 

habe ich nur \ w * wie mein Charakter Capture, da ich nicht vor etwa Bindestriche zu kümmern brauchte, aber ich brauche diese anzupassen das neue Szenario zu behandeln . Kann mir jemand helfen?

+2

Könnten Sie bitte erklären, was Sie tun und warum 'expode (" - ", $ s)' nicht funktioniert? –

+0

Hallo Ich habe zusätzliche Informationen zu meiner ersten Frage hinzugefügt, nicht sicher, wie ich in diesem Fall explodieren würde, aber ich hatte wahrscheinlich nicht genügend Informationen zur Verfügung gestellt. – olliejjc16

+2

Gut, hast du nicht an Charakterklassen gedacht? Wie '[\ w -] *'? Müssen Sie sich über Fälle wie "------ erfolgreich veröffentlicht" Gedanken machen? –

Antwort

1

Wenn Sie brauchen sich nicht um Grenzfälle zu kümmern wie ----- published successfully alles, was Sie brauchen, ist die \w und - zu einem Zeichenklasse[...] (und ich schlage vor, auch eine + quantifier mit hinzuzufügen 1 oder mehr Vorkommen entsprechen, nicht 0 oder mehr, um zu verhindern leer Matches bekommen):

if(preg_match('/([\w-]+) published successfully/',$line,$matches){ 

} 

die regex demo See.

Verwandte Themen