【问题标题】:Match only whole word which includes special characters仅匹配包含特殊字符的整个单词
【发布时间】:2014-09-11 04:05:00
【问题描述】:

我需要帮助找出 RegEx 语句来帮助我正确匹配交换机/路由器上的接口。

示例:正确的匹配可能是:

Fa1/0, Gig2/0/2, Fa3/0/33/333, G1/0/0:1, Gi0/0.900 etc.

我能得到的最接近的是:

[fget][a-z]*[0-9]+(?:[\/\.:][0-9]+)+

问题是它也匹配Fa1/0/Fa1/0aFa1/0 部分,这是不正确的,根本不应该匹配。

谁能帮助我?

给定字符串:Start Fa1/0/1 Gig2/0 Fa1/0/ Ending
仅匹配:Fa1/0/1Gi2/0
限制:您不能使用:\s' '(我使用的解析器不允许)
修饰符:大小写设置为不区分大小写。

以下附加信息/编辑

这实际上是针对新 SecureCRT 7.3 终端应用程序中的 RegEx 解析器。

目标是实时为正确的语法着色,同时从不正确的语法中消除着色。

这就是我们不能依赖 ^ 和 $ 标记的原因,因为你永远无法确定单词会出现在行的开头或结尾。

正确匹配的整个单词将遵循以下格式:接口类型+数字+子接口(可选)。

接口类型:可以是从“F”到 FastEthernet 的任何内容。其他前缀包括 'g' 到 Gigabit,'e' 到以太网,以及 't' 到 10。

数字:这将遵循然后(重复)的模式。示例:1/2 或 1/2/3 甚至 1/2/3/4/5/6/7/8/10/12 在技术上对这种情况有效。

子接口(可选):将遵循 or 的格式。即:.900 或 :123

因此,更多的字符串示例可能是: F1/0/1.900 Gig2/0 Te1/0/0/1:23 单词可以以任何顺序出现并混合许多其他单词。 IE:“显示 Int F1/0/0”或“int Range fa1/0/1 - 24”

【问题讨论】:

  • 您使用的语言/工具是什么?给出更多输入字符串示例。
  • 您可以描述下一个可能的字符并将您感兴趣的内容放入捕获组:(\b[efgt][a-z]*[0-9]+(?:[/.:][0-9]+)+)(?: |$)
  • 不幸的是,上面的代码不起作用,因为不仅 \s not allowed ' ' (空格)也不允许。
  • 您是否尝试在字符类中放置一个空格:[ ] 或转义它:\ 或用其十六进制代码表示它:\x20?请注意,您可以在当前上下文中使用[^a-z0-9/:.] 代替空格。
  • 你太棒了。根本不允许按空格键,但 \x20 成功了!我已经为此头疼了2天。非常感谢。

标签: regex secure-crt


【解决方案1】:

这匹配您列出的所有表达式。除了一些小改动之外,主要的事情是在末尾添加了一个否定的前瞻表达式。

[FG][a-z]*[0-9](?:[\/\.\:][0-9]+)*(?!\/)

【讨论】:

    最近更新 更多