正则表达式用正确的空格数替换字符

时间:2014-07-01 15:07:00

标签: php regex

我想用空格替换所有字符,除了数字,字母,空格和其他字符#=<>();*,.+\/-

e.g。 preg_replace("/[^ #=<>();*,.+\/-\w]+/", " ", $string);

我的问题是,当$string中有两个或更多连续字符要替换时,该函数只用一个空格替换这个字符,而我需要用两个或多个字符替换两个或多个字符或更多空间。

有办法吗?

2 个答案:

答案 0 :(得分:3)

您应该一次只匹配一个字符。你还必须逃避一些角色。

更改

 preg_replace("/[^ #=<>();*,.+/-\w]+/", " ", $string);

 preg_replace("/[^ #=<>();*,\\.+\\/\\-\\w]/", " ", $string);

答案 1 :(得分:1)

  • 如果您的角色类同时包含正斜杠和反斜杠,则需要转义字符类中存在的正斜杠和反斜杠。
  

我想用空格替换所有字符,除了数字,字母,空格和其他字符#=<>();*,.+\/-

  • \w代表字母,数字和_符号。因此,请避免在字符类中使用\w

  • 正如另一个答案所说,你需要删除+个字符后面的字符,它用一个空格替换一个或多个字符。

  • 你的正则表达式应该是,

    [^- #=<>();*,.+\\\/0-9A-Za-z]
    

DEMO

  • 在演示中,它匹配_符号,因为它不包含在NOT字符类中。在替换部分,我只给了一个空格。它用三个空格替换三个_符号。