0

抱歉,我从来没有掌握过正则表达式。

我需要从字符串中删除任何不是字母数字的内容(从产品名称中,其中一些包含与号),不包括空格。

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

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

现在这用“”替换了所有字母数字。这很好,除了我想排除空格,因为它当前正在删除所有空格。另外,我在任何地方都找不到波浪号(~)在正则表达式中的作用。

关于空间,我看到有一个负前瞻,由 实现?!,但我不知道如何将其合并到上面。

4

2 回答 2

6

此外,我在任何地方都找不到波浪号(~)在正则表达式中的作用。

PHP 中的正则表达式通常包含在一组分隔符中,~但您可以使用任何非字母数字字符,除了文档中提到的少数字符。

现在,如果您想替换任何非字母数字不包括空格,那么您可以执行以下操作:

~[^a-zA-Z0-9\s]+~
  • ^在字符类内部[]使字符类匹配其中未提及的任何内容,就像[^a]匹配除a.
  • a-z匹配小写字母。
  • A-Z匹配大写字母。
  • 0-9匹配数字。
  • \s匹配空格字符。
  • ^使上一课匹配除提到的内容之外的所有内容。
  • +在字符类之后,使字符类匹配一个或多个字符类中未提及的字符。

\W单独匹配非单词字符,那么单词字符是什么?

单词字符通常是任何字母(小写、大写)、数字或下划线_

单词字符\w (带有小的w通常等于这个字符类[a-zA-Z0-9_]。

\W (big W)匹配非单词字符,因此它匹配除\w空格以外的任何字符,因此它也会删除空格。

于 2013-11-04T14:41:33.753 回答
0

您可以在类块中进行简单的否定

$productname = preg_replace("#[^A-Za-z0-9]+#","",$product['name']);

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

于 2013-11-04T14:37:30.007 回答