2016-08-24 4 views
2

Ich versuche, eine Regex zu schreiben, die alles nach etwas ersetzt, das kein Leerzeichen oder ein Buchstabe in PHP ist.PHP - Regex ersetzen alles nicht Buchstaben oder Leerzeichen und alles danach

Ich habe derzeit folgende

$_product[self::NAME] = preg_replace('^[a-z .*$]+$/i', '', $_product[self::NAME]); 

Es ersetzt die Zeichenfolge mit einem leeren String.

Hier sind einige Beispiele von dem, was ich

Milk - 50 Gallons 

Milk 

chocolate milk - 50 gallons 

zurückkehren sollte

Diese Zeichenfolge zurückgeben sollte
chocolate milk 
bin ersetzen

Es sollte das gleiche tun, auch wenn die Bindestriche nicht da sind, kehren

Milk 50 gallons 

Sinn sollte

Milk 

Was in meiner regex falsch ist?

+0

sollte es nichts ersetzen. Ihrem Muster fehlt die Öffnung '/', es ist also ein Syntaxfehler. und in einer Zeichenklasse ('[]') sind '.',' * 'und' $ 'KEINE Wildcards und haben keine besondere Bedeutung. –

+0

Zuerst haben Sie das Trennzeichen vergessen und geben dann einige Beispieleingabezeichenfolgen und das erwartete Ergebnis an. – Toto

+0

Dieser reguläre Ausdruck würde nicht einmal analysieren.Sie haben auch vergessen, die von Ihnen verwendete Eingabe einzuschließen, die das unerwartete Ergebnis lieferte. – Sherif

Antwort

1

Die Es ersetzt die Zeichenfolge durch eine leere Zeichenfolge beweist, dass Sie einen Tippfehler beim Posten der Frage gemacht, und Sie haben tatsächlich '/^[a-z .*$]+$/i' Regex.

Das bedeutet auch, dass Ihr Regex beliebige Zeichenfolge übereinstimmt, die ein oder mehr Zeichen aus dem [a-z .*$] Set enthält (ASCII-Buchstaben, Raum, punkt, * oder $ Symbole).

Wenn Sie eine regex müssen, die alles nach etwas ersetzt, das ist kein Raum oder einen Brief, müssen Sie

preg_replace('/\s*[^a-z\s].*$/i', '', $_product[self::NAME]); 

Siehe regex demo

Einzelheiten:

  • \s* - null oder mehr Leerzeichen
  • [^a-z\s] - jedes Zeichen anders als ASCII-Buchstaben oder Leerzeichen
  • .* - alle null oder mehr Zeichen außer Newline (add /s Modifikator auch neue Zeilen entsprechen)
  • $ - Schnur Ende.
+0

_Ersetzt die Zeichenfolge durch eine leere Zeichenfolge_ war kein Tippfehler. Dieser Code hat die Zeichenfolge durch eine leere Zeichenfolge ersetzt. – djames

+0

@djames: Sie müssen regex Trennzeichen verwenden (eine am Anfang, der andere am Ende) mit 'preg_' Funktionen. –

+1

Dies ist jedoch die richtige Antwort. Vielen Dank. – djames

Verwandte Themen