我需要一个正则表达式来删除特定字符前的所有空格。
删除第一个“ - ”之前的所有空格
在:
My Beautiful Video - Hello darling - 19.10.2015 10:00
后:
MyBeautifulVideo - Hello darling - 19.10.2015 10:00
答案 0 :(得分:1)
您可以使用(*SKIP)(*F)
或捕获群组。
preg_replace('~ - .*(*SKIP)(*F)| ~', '', $str);
上述正则表达式控制动词的语法必须类似,
What_I_want_to_avoid(*SKIP)(*FAIL)|What_I_want_to_match
所以- .*
部分应匹配从第一个空格连字符空间到最后一个空格的所有字符。现在控制动词(*SKIP)(*F)
使匹配失败。现在,OR运算符之后的正则表达式只会与剩余的字符串进行匹配。如果您在备用分支中使用.*
,.*?
,则无效。
或
preg_replace('~( - .*)| ~', '\1', $str);
答案 1 :(得分:1)
\s*-.*$\K|\s
您可以在此处使用\K
并替换为空字符串。
$re = '/\s*-.*$\K|\s/m';
$str = "My Beautiful Video - Hello darling - 19.10.2015 10:00";
$subst = "";
$result = preg_replace($re, $subst, $str);