【问题标题】:Cisco regex match this but not that思科正则表达式匹配这个但不是那个
【发布时间】:2013-12-24 17:29:56
【问题描述】:

我在一个更大的配置中有以下字符串:

as-path-set DAVE-9999-CBG
as-path-set DAVE-9999-CBG
as-path-set DAVE-55555-CBG
as-path-set DAVE-44444-CBG
as-path-set DAVE-33333-CBG
as-path-set DAVE-11111-CBG
as-path-set DAVE-22222-CBG

我想为包含 9999 的行匹配所有这些行 except。我不太了解否定正则表达式,无法完成这项工作。有人可以帮忙吗。理想的输出是:

as-path-set DAVE-55555-CBG
as-path-set DAVE-44444-CBG
as-path-set DAVE-33333-CBG
as-path-set DAVE-11111-CBG
as-path-set DAVE-22222-CBG

【问题讨论】:

  • 数字总是重复还是as-path-set DAVE-13547-CBG可能匹配?文字总是一样的吗? as-path-set DAVE-99999-CBG 可能吗?

标签: regex cisco


【解决方案1】:

您可以使用负前瞻:

^as-path-set DAVE-(?!9999)[0-9]+-CBG$

【讨论】:

    【解决方案2】:

    消极的向后看,并且知道你所有的行都以特定的字符串结尾:

    .*(?<![9]{4}-CBG)$
    

    Live demo

    【讨论】:

    • 如果您不想匹配 5 个 9 的大小写,可能需要使用 .*(?&lt;!-[9]{4}-CBG)$。另外,为什么不只使用.*(?&lt;!9999-CBG)$,而不是使用{} 操作?
    • @Mark OP 说一行包含 9999,所以 5 个 9 也有 4 个 9,在正则表达式中大约有 9999,这只是一种编码方式。
    • 不清楚他实际上是指 4 个或更多 9,所以我只是提供了一个替代方案。与替代编码相同,当您教某人一些新的和微妙的东西(例如负面的后视)时,请简化其他所有内容。它有帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多