正则表达式删除严重重音内的前导和尾随空格

时间:2016-04-15 09:15:26

标签: php regex

请有人在这里更正我的正则表达式,我正在尝试删除严重重音中的空格

我的字符串看起来像这样

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

这是我的正则表达式

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

我得到了这个输出

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

我希望这是输出

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

如何修剪严重重音内的单词?有人指导我

1 个答案:

答案 0 :(得分:1)

您错过了匹配\w+右侧的空白。

您可以在\w+的两侧添加可选的空格模式并使用

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

并替换为`$1`

请参阅regex demo

PHP 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

如果您不想匹配任何`no_spaces_here`字符串(例如`table_gis`),可以使用

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

demo)并替换为与上述相同的模式(即"`$1`")。