【发布时间】: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/0a 的Fa1/0 部分,这是不正确的,根本不应该匹配。
谁能帮助我?
给定字符串:Start Fa1/0/1 Gig2/0 Fa1/0/ Ending
仅匹配:Fa1/0/1 和 Gi2/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