正则表达式:替换除空格之外的任何非字母数字字符串

时间:2013-11-04 14:34:36

标签: php regex

我的道歉,我从来没有掌握正则表达式。

我需要删除任何东西(来自产品名称,其中一些都有&符号),这些字母不是字符串中的字母数字,不包括空格。

到目前为止,我有这个(从另一个stackoverflow post找到):

$productname = preg_replace("~[\W]~","",$product['name']);

现在用“”代替字母数字的所有内容。这很好,除了我想排除空格,因为它正在删除所有空格。此外,我找不到波形符(~)在正则表达式中的作用。

关于这些空格,我看到有一个否定前瞻,由?!实现,但如何将其纳入上述我不知道。

2 个答案:

答案 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']);

它将替换为“”不是字母数字的所有内容