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
什么是错误的,我的正则表达式?
答
The 它用空白字符串替换字符串证明你在发布问题时犯了一个错字,而你实际上有'/^[a-z .*$]+$/i'
正则表达式。
这也意味着你的正则表达式包含从[a-z .*$]
组一个或多个字符(ASCII字母,空格,点,*
或$
符号)匹配任何字符串。
如果你需要一个正则表达式的东西后取代一切,这不是一个空格或字母,你需要
preg_replace('/\s*[^a-z\s].*$/i', '', $_product[self::NAME]);
详细:
-
\s*
- 零个或多个空格 -
[^a-z\s]
- 比ASCII字母或空格 -
.*
其他任何字符 - 换行除外任何零个或多个字符(添加/s
改性剂也匹配换行符) -
$
- 字符串的结尾。
它不应该取代任何东西。你的模式缺少开放的'/',所以这是一个语法错误。和字符类('[]'),''','*'和'$'不是通配符,并且没有特殊含义。 –
首先,您忘记了分隔符,然后给出一些示例输入字符串和预期结果。 – Toto
正则表达式甚至不会解析。您还忘记了包含提供意外结果的输入。 – Sherif