PHP - 正则表达式通过保留一些异常来删除任何非字母数字的东西

时间:2018-01-15 15:14:19

标签: php regex

我想要删除任何非字母数字的内容,无论小写或大写,并替换为' &#39 ;.但是有一些例外。

例外

  

'!?

但允许单引号是一件令人头疼的事情,我已经在Stack-overflow中搜索了很多,但没有找到符合我要求的答案。

  

$ text = preg_replace(' / [^ \ da-z!\'?。] / i','',$ text);

我尝试了上面的正则表达式,但它也替换了单引号。但我需要保留它并用空的空格替换所有其他非字母数字字符。有人可以帮我吗?

例如:

$builder->get('issueType')
    ->addModelTransformer(new CallbackTransformer(
        function ($type) {
            // your logic here
            return $type;
        },
        function ($type) {
            // your logic here
            return $type;
        }
    ));

1 个答案:

答案 0 :(得分:1)

您可以在正则表达式中使用NOT模式:

<?php 
echo implode(' ', preg_split('#[^a-z0-9\.\?\'!]#i', $input));

您无法以简单的方式使用preg_replace一次替换所有内容。但是你可以在正则表达式上爆炸并用空格破坏它们。

解释正则表达式:

#是分隔符

[]组成一个组

^组内的所有内容都不匹配(逆变器)

a-z不匹配字符a到z

0-9匹配字符0到9

其他字符已转义。

我标记以使匹配大小写不敏感。