2012-03-30 6 views
2

Ich habe diese Kombination in einem String:Wie Punkte aus dieser Kombination in PHP entfernen

"I am tagging @username1.blah. and @username2.test. and @username3." 

ich das versucht:

preg_replace('/\@^|(\.+)/', '', 'I am tagging @username1.blah. and @username2.test. and @username3. in my status.'); 

Aber das Ergebnis ist:

"I am tagging @username1blah and @username2test and @username3 in my status" 

Das obige Ergebnis ist nicht das, was ich wollte.

Dies ist, was ich erreichen will:

"I am tagging @username.blah and @username2.test and @username3 in my status." 

Könnte mir jemand helfen, was ich in dem Muster falsch gemacht haben?

Vielen Dank, Jon

Antwort

1

Dies Punkte am Ende der „Wörter“ ersetzen, die mit @

$input = "I am tagging @username1.blah. and @username2.test. and @username3. in my status."; 
echo preg_replace('/(@\S+)\.(?=\s|$)/', '$1', $input); 

(@\S+)\.(?=\s|$) wird übereinstimmen einen Punkt am Ende eines nicht Leerzeichen (\S) Serie, wenn der Punkt beginnen, ist gefolgt von einem Leerzeichen oder einem Ende der Schnur ((?=\s|$))

2

Try this:

preg_replace('/\.(\s+|$)/', '\1', $r); 
+0

danke für die Antwort, es ist sehr nützlich - aber ich habe die Frage bearbeitet, weil ich möchte, dass die Änderungen nur für das Wort gelten, das mit '@' Symbol begann. Danke vielmals. – jobun

3

Ich mag regex nicht sehr viel, aber wenn Sie sicher sind, dass die Punkte Sie immer entfernen wollen, gefolgt von einem Leerzeichen , könnten Sie so etwas tun:

php > $a = "I am tagging @username1.blah. and @username2.test. and @username3."; 
php > echo str_replace(". ", " ", $a." "); 
I am tagging @username1.blah and @username2.test and @username3 
+1

Dadurch werden Punkte entfernt, auch wenn das Wort nicht mit "@" beginnt. – Toto

0

Wie wäre:

preg_replace("/(@\S+)\.(?:\s|$)/", "$1", $string); 
0
/\@\w+(\.\w+)?(?<dot>\.)/ 

, dass alle Punkte übereinstimmen und benennen sie diese in der Punktgruppe

Verwandte Themen