Php 仅在字符正则表达式之前匹配空格并用破折号替换空格

Php 仅在字符正则表达式之前匹配空格并用破折号替换空格,php,regex,preg-replace,Php,Regex,Preg Replace,我想要的是用破折号替换空格-,但前提是该空格后面有一个字符。原因是我有一个字符串数组,其中一些字符串在最后一个单词或字符后插入空格。(这是我无法控制的)。 例如 在下面的示例中,我使用了%20来显示空间的位置 string1=farmer%20jones string2=farmer%20jim%20 我有下面的regexpreg_replace('/\s./','-',$string) 我想我已经成功了一半,但是上面的代码搜索字符前面的空格,并将其替换为- 我用上面的正则表达式得到的是 str

我想要的是用破折号替换空格
-
,但前提是该空格后面有一个字符。原因是我有一个字符串数组,其中一些字符串在最后一个单词或字符后插入空格。(这是我无法控制的)。 例如 在下面的示例中,我使用了%20来显示空间的位置
string1=farmer%20jones
string2=farmer%20jim%20

我有下面的regex
preg_replace('/\s./','-',$string)

我想我已经成功了一半,但是上面的代码搜索字符前面的空格,并将其替换为
-

我用上面的正则表达式得到的是
string1=farmer-jones
string2=farmer jim-

我想要的是:
string1=farmer-jones
string2=farmer jim

我不想添加后面的
-


非常感谢您的任何帮助

您可以在此处使用消极前瞻:

$repl = preg_replace('/\h+(?!$)/', '-', $string);
  • \h+
    将匹配一个或多个水平空白
  • (?!$)
    将断言下一个位置不是行尾

在一个正则表达式中,这一切都是可能的,但是在应用当前正则表达式之前调整值也可以解决您的问题。。。