我的道歉,我从来没有掌握正则表达式。
我需要删除任何东西(来自产品名称,其中一些都有&符号),这些字母不是字符串中的字母数字,不包括空格。
到目前为止,我有这个(从另一个stackoverflow post找到):
$productname = preg_replace("~[\W]~","",$product['name']);
现在用“”代替字母数字的所有内容。这很好,除了我想排除空格,因为它正在删除所有空格。此外,我找不到波形符(~
)在正则表达式中的作用。
关于这些空格,我看到有一个否定前瞻,由?!
实现,但如何将其纳入上述我不知道。
答案 0 :(得分:4)
另外,我无法找到正则表达式(〜)在正则表达式中的作用。
PHP中的正则表达式包含在一组分隔符中,通常为~
但您可以使用任何非字母数字字符,除了文档中提到的一些字符。
现在,如果您想要替换任何不包含空格的非字母数字,那么您可以执行以下操作:
~[^a-zA-Z0-9\s]+~
^
内的[]
使字符类与其中未提及的内容匹配,例如[^a]
匹配a
以外的任何内容。a-z
匹配小写字母。A-Z
匹配大写字母。0-9
匹配数字。\s
匹配空格字符。^
使之前的课程与所提到的内容相匹配。+
在字符类之后,使字符类与字符类中未提及的一个或多个字符匹配。 \W
单独匹配非单词字符,那么单词字符是什么?
单词字符通常是任何字母(小写,大写),数字或下划线_
。
单词字符\w
(小w
)通常等于此字符类[a-zA-Z0-9_
]。
\W
(大W
)匹配非单词字符,因此它匹配\w
匹配的任何内容,包括空格,因此它也会删除空格
答案 1 :(得分:1)
你可以在类块中做简单的否定
$productname = preg_replace("#[^A-Za-z0-9]+#","",$product['name']);
它将替换为“”不是字母数字的所有内容