如何从字符串中间删除空格,但在开头保留空格?

时间:2019-04-18 07:07:31

标签: regex apache regexp-replace

几年前,我们所有的Apache配置文件都更改为到处都带有空格(请参见下文,不知道是谁做的)。由于我是从2.2升级到2.4,因此很难找到并替换所有必需的配置更改。

我想摆脱中间的空格,但将空格留在前面。我知道如何在开始,结束和各处替换。我什至查阅过几本书(例如Jeff Friedl的regexp),但我无法理解这一点-甚至不确定这是否可能。

  <Directory            "THEDIRECTORY">
    <LimitExcept        GET POST>
      deny              from all
    </LimitExcept>
    Options             -Indexes -MultiViews
    AllowOverride       All
    Order               allow,deny
    Allow               from all
  </Directory>

我想要的是

  <Directory "THEDIRECTORY">
    <LimitExcept GET POST>
      deny from all
    </LimitExcept>
    Options -Indexes -MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

因此我可以轻松搜索并替换Apache 2.4的配置更改

我以为是末路

s/\s+(.*)\s+(.*)\s+$/$1$2/g

但是,由于许多原因(包括替换的数量发生变化,它们是非固定的数量),因此无法使用。

请帮助,我一无所知。

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式一次匹配两个或多个水平空白,并将其替换为单个空格。

(?<=\S)\h{2,}(?=\S)

此正则表达式确保使用\S仅匹配由非空格字符包围的空格

Regex Demo

如果您的正则表达式不支持\h,则可以仅使用空格代替\h并将正则表达式写为

(?<=\S) {2,}(?=\S)

Demo using space only

答案 1 :(得分:0)

请确保将以下行添加到.htaccess或apache conf文件目录标签(如果尚不存在的话):

RewriteEngine On

然后在下面添加

  

      RewriteCond%{REQUEST_URI} \ s

     

RewriteRule。* https://DOMAIN_NAME/ [R = 301,L]

     

替换DOMAIN_NAME。