【问题标题】:Negate complete regex [duplicate]否定完整的正则表达式[重复]
【发布时间】:2015-11-15 18:19:28
【问题描述】:

强制某个 url 结构“类型/名称”,我的工作正则表达式是:

([a-z]+\/?[a-z]+\/?)+

现在我想通过 preg_replace 从字符串中删除所有其他字符,因此否定上面的模式。像 [^a-z] 这样的简单案例可以正常工作,但对于我的模式,我无法通过否定整个模式来使其工作。

【问题讨论】:

    标签: php regex regex-negation regex-lookarounds negation


    【解决方案1】:

    你可以试试这个:

    (?!([a-z]+\/?[a-z]+\/?)+)
    

    即:

    • 前缀(?!
    • 后缀)

    【讨论】:

    • 可能这是否定正则表达式的唯一直接方法。所以我的投票是给你的 :) 否定正则表达式意味着扫描整个字符串空间以查找与第一个正则表达式匹配的字符串,如果它们匹配,则认为它们不匹配。没有直接的形式可以将正则表达式转换为其否定(或补码) 一种有效的算法是将正则表达式编译为 DFA,然后将所有接受状态更改为不接受状态,并将结果再次转换回正则表达式。但通常情况下,由此产生的正则表达式比原来的要复杂得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2014-02-25
    • 2019-10-19
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多