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

时间:2015-10-19 17:25:09

标签: regex preg-replace

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

例:

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

在:

My Beautiful Video - Hello darling - 19.10.2015 10:00

后:

MyBeautifulVideo - Hello darling - 19.10.2015 10:00

2 个答案:

答案 0 :(得分:1)

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

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

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

What_I_want_to_avoid(*SKIP)(*FAIL)|What_I_want_to_match

所以- .*部分应匹配从第一个空格连字符空间到最后一个空格的所有字符。现在控制动词(*SKIP)(*F)使匹配失败。现在,OR运算符之后的正则表达式只会与剩余的字符串进行匹配。如果您在备用分支中使用.*.*?,则无效。

source

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

DEMO

DEMO

答案 1 :(得分:1)

\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);