仅在字符正则表达式之前匹配 space 并将 space 替换为破折号

matching space only before character regex and replacing space with dash

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

我有以下正则表达式 preg_replace('/\s./', '-', $string);

我想我已经完成了一半,但是上面的搜索是在字符前面搜索 space 并将其替换为 -

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

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

我不想添加尾随 -

非常感谢任何帮助

你可以在这里使用否定前瞻:

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

RegEx Demo