PHP - 正则表达式替换所有字母或空格以及其后的所有内容

时间:2016-08-24 19:24:04

标签: php regex preg-replace

我正在尝试编写一个正则表达式来替换PHP中不是空格或字母之后的所有内容。

我目前有以下

$_product[self::NAME] = preg_replace('^[a-z .*$]+$/i', '', $_product[self::NAME]);

用空字符串替换字符串。

以下是我正在替换的一些例子

Milk - 50 Gallons

应该返回

Milk

此字符串

chocolate milk - 50 gallons

应该返回

chocolate milk

即使连字符不存在,也应该这样做,这意味着

Milk 50 gallons

应该返回

Milk

我的正则表达式有什么问题?

1 个答案:

答案 0 :(得分:1)

用一个空白字符串替换字符串证明你在发布问题时写了一个拼写错误,实际上你有'/^[a-z .*$]+$/i'正则表达式。

这也意味着你的正则表达式匹配任何包含[a-z .*$]集合中的一个或多个字符的字符串(ASCII字母,空格,点,*$符号)。

如果您需要正则表达式替换所有不是空格或字母之后的所有内容,则需要

preg_replace('/\s*[^a-z\s].*$/i', '', $_product[self::NAME]);

请参阅regex demo

<强>详情:

  • \s* - 零个或多个空格
  • [^a-z\s] - ASCII字母或空格以外的任何字符
  • .* - 除换行符之外的任何零个或多个字符(添加/s修饰符以匹配换行符)
  • $ - 字符串结束。