2016-04-15 2 views
1

Bitte hier jemand korrigiert mein regex, ich versuche Räume im Inneren Grab Akzente wie diesesRegex zu entfernen vordere und hintere Räume im Inneren Grab Akzente

`table_gis`.` latitude` = -7.759 AND CONCAT(`table_gis`.smsx,'_',`table_gis`.` stns `) IN ('SPX_0104','SDSX_133') AND 

Meine Zeichenfolge sieht zu entfernen Dies ist meine regex

preg_replace('/([`])([\s]+)([\w]+)([`])/', "$1$3$4",$str) 

ich t sein Ausgang

`table_gis`.`latitude` = -7.759 AND CONCAT(`table_gis`.smsx,'_',`table_gis`.` stns `) IN ('SPX_0104','SDSX_133') AND 

ich dies als Ausgangs erwarten

`table_gis`.`latitude` = -7.759 AND CONCAT(`table_gis`.smsx,'_',`table_gis`.`stns`) IN ('SPX_0104','SDSX_133') AND 

Wie trimmen ich das Wort, das im Inneren der Grab Akzente ist? jemand führe mich

+1

Okay, ich werde nur fragen: Warum in aller Welt machst du das? Kann man es nicht schneiden * bevor * es in die Abfrage eingefügt wird? –

Antwort

1

Sie vermissen es, die Whitespace auf der rechten Seite von \w+ übereinstimmen.

können Sie optional Leerzeichen-Muster addieren auf beiden Seiten des \w+ und verwenden

`\s*(\w+)\s*` 

und ersetzen mit `$1`

Siehe regex demo

:

$str = "`table_gis`.` latitude` = -7.759 AND CONCAT(`table_gis`.smsx,'_',`table_gis`.` stns `) IN ('SPX_0104','SDSX_133') AND"; 
$result = preg_replace('~`\s*(\w+)\s*`~', "`$1`", $str); 
echo $result; 
// => `table_gis`.`latitude` = -7.759 AND CONCAT(`table_gis`.smsx,'_',`table_gis`.`stns`) IN ('SPX_0104','SDSX_133') AND 

Wenn Sie keine `no_spaces_here` Zeichenfolge (z. `table_gis`), können Sie

(?|`\s+(\w+)\s*`|`\s*(\w+)\s+`) 

(demo) verwenden und mit dem gleichen Muster ersetzen, wie oben (das heißt "`$1`").

+0

Vielen Dank seine Arbeit – user3637224

+0

Froh, dass es hilft. Trotzdem gibt es jemanden, der denkt, dass es nicht so ist. –

+0

@Downvoter, bitte posten Sie Ihre Lösung, wenn Sie mit meiner nicht einverstanden sind. –