【问题标题】:PHP preg replace whitehat charactersPHP preg 替换白帽字符
【发布时间】:2016-02-17 16:50:33
【问题描述】:

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

它按预期工作:

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

我尝试给某些字符加白帽,但它不起作用

我尝试在下面添加白点、逗号、减号和空格:

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

相反,它允许一切,甚至是奇怪的字符。

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

【问题讨论】:

标签: php regex preg-replace


【解决方案1】:

很遗憾,PHP 中的 PCRE 不支持character class intersection,也不支持subtraction

您可以使用否定字符类和反向速记 Unicode 类别类来做到这一点:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2015-08-07
    相关资源
    最近更新 更多