PHP preg 替换白帽字符


PHP preg replace whitehat characters

此正则表达式保留字母和数字并删除其余部分

它按预期工作:

$content = preg_replace('~'P{Xan}+~u', '', $string);

我尝试白帽一些角色,但它不起作用

我尝试在下面白帽点,逗号,减号和空格:

$content = preg_replace('~'P{Xan}.,- +~u', '', $string);

相反,它允许一切,甚至是奇怪的角色。

我怎样才能让它像以前一样工作,但只是白帽一些特殊字符?

不幸的是,PHP 中的 PCRE 不支持字符类交集,也不支持减法。

您可以使用否定字符类和反向速记 Unicode 类别类来执行此操作:

'~[^'p{Xan}., +-]+~u'

'P{Xan} = [^'p{Xan}] ,但是我们可以在否定的字符类中添加更多字符,含义将是 *match 除 'p{Xan}.,、空格、+- 以外的字符。

另一种方法是通过展望来限制通用子模式(但不要忘记将该子模式放入组中,因为量词应应用于生成的(?:(?![., +-])'P{Xan})构造(:

'~(?:(?![., +-])'P{Xan})+~u'