以下字符串包含两个数字(下面的 1 和 2),两个数字不能相等才能匹配。它们是优先值,因此其中一个必须大于另一个。如果它们相等,则认为是错误配置。两个数字都可以在 0-512 范围内。
set hbdev "ha1" 1 "port1" 2
我有一个我认为有效的正则表达式:
set hbdev [[:print:]]+ ([0-9]|[1-9][0-9]|[1-4][0-9][0-9]|50[0-9]|51[012]) [[:print:]]+ (?<!(\d{3}))\1
重要的是,由于我限制了第一个数字的范围,因此很容易将负向前查找设置为仅查找最多三位数字。然而出于兴趣,我想让这个适用于任何大小的数字。
我尝试在否定前瞻中使用 \d+ :
set hbdev [[:print:]]+ (\d+) [[:print:]]+ (?<!(\d+))\1
但是我得到了错误:lookbehind 中的量词使其宽度不固定。
有没有办法解决这个问题,使数字可以是任意大小?
这是我的工作:https://regex101.com/r/cmOgMv/1
提前感谢您的帮助!
我可能不完全关注你,但这不是吗
(\d+) (?!\1)
(所以您正在使用的系统中会出现类似
(\d+) [[:print:]]+ (?!\1)
的内容。)