包括字符类

时间:2016-05-22 09:35:16

标签: php regex expression

我如何在角色类中添加量词?这是我当前的正则表达式,我想要实现的(除了它现在正在做的事情)是将匹配空格和点(出现次数超过2)并最终使用preg_replace函数删除

当前正则表达式:

[^A-Za-z0-9\s.\'\(\)\-\_]

期望的解决方案(注意量词{1}):

[^A-Za-z0-9\s{1}.{1}\'\(\)\-\_]

输入(必须过滤):

Hi, this is a text.......that has    to be filtered!@#!

输出(正则表达式后):

Hi this is a textthat hasto be filtered

2 个答案:

答案 0 :(得分:1)

字符类中不可能有量词。但是你可以使用交替和正常量词,比如

$str = "Hi, this is a text.......that has    to be filtered!@#!";
$pattern = "/[^A-Za-z0-9\\s.'()_-]|\\.{3,}|\\s{3,}/";
$subst = "";
print(preg_replace($pattern, $subst, $str));

输出:Hi this is a textthat hasto be filtered

您还可以将字符类缩短为[^\\w\\s.'()-]

在正则表达式[^A-Za-z0-9\\s.'()_-]匹配任何非字母数字或空格或圆点或圆括号或撇号或下划线或减号的字符。 \\.{3,}匹配任何出现3或更多(超过2)的点。 \\s{3,}匹配任何出现3或更多(超过2)的空格 - 请注意,这将匹配例如空白选项卡空白,因为这些都是空白字符。

使用空字符串替换,匹配的所有内容都将被替换为空字符串(因此被删除)。

答案 1 :(得分:0)

使用preg_replace_callback函数的另一种解决方案:

$str = "Hi, this is a text.......that has    to be filtered!@#!";

$replaced = preg_replace_callback(
        ["/(\s{3,}|\.{3,})/" , "/[^A-Za-z0-9\s.'()_-]/" ],
        function($m) { return ""; },
        $str);

print_r($replaced);

输出:

Hi this is a textthat hasto be filtered