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

问题描述:

我试图编写一个正则表达式,它在PHP中不是空格或字母之后替换所有内容。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 

什么是错误的,我的正则表达式?

+0

它不应该取代任何东西。你的模式缺少开放的'/',所以这是一个语法错误。和字符类('[]'),''','*'和'$'不是通配符,并且没有特殊含义。 –

+0

首先,您忘记了分隔符,然后给出一些示例输入字符串和预期结果。 – Toto

+0

正则表达式甚至不会解析。您还忘记了包含提供意外结果的输入。 – Sherif

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

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

如果你需要一个正则表达式的东西后取代一切,这不是一个空格或字母,你需要

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

regex demo

详细

  • \s* - 零个或多个空格
  • [^a-z\s] - 比ASCII字母或空格
  • .*其他任何字符 - 换行除外任何零个或多个字符(添加/s改性剂也匹配换行符)
  • $ - 字符串的结尾。
+0

_用空白字符串替换字符串_不是拼写错误。该代码确实用空字符串替换了字符串。 – djames

+0

@djames:您必须使用'preg_'函数使用正则表达式分隔符(一个在开始处,另一个在结尾处)。 –

+1

但是,这是正确的答案。谢谢。 – djames