我需要一个正则表达式来删除特定字符前的 space

I need a regex to remove space before a specific character

我需要一个正则表达式来删除特定字符前的所有 space。

示例:

删除第一个“-”之前的所有space

之前:

My Beautiful Video - Hello darling - 19.10.2015 10:00

之后:

MyBeautifulVideo - Hello darling - 19.10.2015 10:00

您可以使用 (*SKIP)(*F) 或捕获组。

preg_replace('~ - .*(*SKIP)(*F)| ~', '', $str);

上述正则表达式控制动词的语法必须像,

What_I_want_to_avoid(*SKIP)(*FAIL)|What_I_want_to_match

所以 - .* 部分应该匹配从第一个 space 连字符 space 到最后一个连字符的所有字符。现在控制动词 (*SKIP)(*F) 使匹配失败。现在 OR 运算符之后的正则表达式将仅从剩余的字符串中进行匹配。如果在备用分支中使用 .*.*? 将不起作用。

source

preg_replace('~( - .*)| ~', '', $str);

DEMO

DEMO

\s*-.*$\K|\s

你可以在这里使用\K并替换为空字符串。

Demo on regex101

$re = '/\s*-.*$\K|\s/m'; 
$str = "My Beautiful Video - Hello darling - 19.10.2015 10:00"; 
$subst = ""; 

$result = preg_replace($re, $subst, $str);