2017-03-26 2 views
2

Ich habe die folgende Zeichenfolge und ich muss die Zahlen und Punkte mit einem Stern ersetzen. Ich habe Folgendes versucht, aber ich habe es gerade geschafft, den letzten Teil zu ersetzen, gibt es einen Weg, wie ich es mit einer einzigen Regex-Suche machen kann? oder muss ich es analysieren zweimal ?:Ersetzen ganze Zahlen und Punkte mit Regex

FOO_BAR_FOOBA_1_R:FOO_1.0 

Regex Ich habe versucht, ist: (. \ d \ d) Dass man fängt der letzte Teil, aber nicht der Anfang. ich so unter bin mit PHP ist der Code, den ich bisher haben:

$re = '/(\d.\d)/'; 
$str = 'FOO_BAR_FOOBA_1_R:FOO_1.0'; 
$subst = '*'; 

$result = preg_replace($re, $subst, $str); 

echo "The result is".$result; 

Wenn ich \ d verwende ich alle ganzen Zahlen erhalten, aber nicht der Punkt sowie eine Vielzahl von Sternen.

Danke in fortgeschrittenem.

+0

Lassen Sie die Leute Ihren Code nicht ausführen, um Ergebnisse zu sehen, posten Sie sie. Wenn du nur nach Punkten und Ziffern suchst und nicht validierst, benutze einfach '[. \ D] +' – sln

+0

Entschuldigung für die fehlenden Ergebnisse, nächstes Mal werde ich sicherstellen, dass sie hinzugefügt werden. Danke für die Rückmeldung und Antwort! – Erik

Antwort

0

Ihre regex:

(\d.\d) 

sucht a number, any non new line character (. ist ein Sonderzeichen in reguläre Ausdrücke), und wieder a number. Die einzige Stelle in Ihrer Zeichenfolge ist am Ende. Für eine Demo dieses siehe: https://regex101.com/r/vHef6Q/2/

könnten Sie verwenden:

\d+(\.\d+)? 

beliebige Zahlen mit einem optionalen Dezimalteil zu finden.

Demo: https://regex101.com/r/vHef6Q/1/

Seien Sie vorsichtig mit . s in regexs. Verwenden Sie auch quantifiers, wenn mehrere Werte zulässig sind. \d ist eine einzelne ganze Zahl, für Zahlen größer als 9 benötigen Sie eine +. Dies ist auch die Antwort darauf, warum Sie mehrere Starts erhalten, wenn Sie einfach \d verwenden.

+0

Danke für die schnelle Rückmeldung, Ihre Antwort funktioniert wunderbar. Ich werde sicherstellen, dass ich diese Quantifizierer anschauen werde! – Erik