此正则表达式保留字母和数字并删除其余部分
它按预期工作:
$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'