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

PHP - Regex replace everything not letter or space and everything after it

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

我目前有以下

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

它将字符串替换为空白字符串。

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

Milk - 50 Gallons

应该return

Milk

这个字符串

chocolate milk - 50 gallons

应该return

chocolate milk

即使连字符不存在,它也应该做同样的事情,意思是

Milk 50 gallons

应该return

Milk

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

它用空字符串替换了字符串证明你在发帖时打错了,你实际上有'/^[a-z .*$]+$/i'正则表达式。

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

如果您需要一个 正则表达式来替换非 space 或字母 之后的所有内容,您需要

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

regex demo

详情:

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