**已关闭。**此问题需要debugging details。目前不接受回答。
编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答问题。
10天前关闭。
社区在8天前审查了是否重新打开此问题,并将其关闭:
需要细节或清晰度通过editing this post添加细节并澄清问题。
Improve this question的
我试图创建一个脚本,将梳理通过思科“显示运行所有”文件,并返回一个接口的基础上,如果一个命令出现。我有一个Regex的开始,但它的匹配上一个接口,而不是所需的接口。
我的正则表达式是interface (\S+)(?s).*?access-session port-control force-authorized
下面的示例信息。期望的结果应该是GigabitEthernet1/0/45
,但它返回的是GigabitEthernet1/0/44
。
样本数据:
interface GigabitEthernet1/0/44
access-session port-control auto
!
interface GigabitEthernet1/0/45
access-session port-control force-authorized
字符串
3条答案
按热度按时间wi3ka0sx1#
好吧,我想我已经很接近了,但这里是工作的地方。基本上我不得不告诉它停止匹配!它在配置文件中分隔接口配置。(添加[^!])
字符串
lyfkaqu12#
试试下面的匹配模式。
字符串
或者,* 捕获模式 *。
型
1tu0hz3e3#
下面的正则表达式就可以了(将
(?s).*?
替换为\s+
):字符串
(?s)
(这使得.
也匹配换行符),因为\s
也匹配一个换行符,而且你只需要匹配 * 空白 *。.*?
不匹配 any 字符串,就不需要像your own solution attempt那样 exclude 字符。型
[^!]+?
non-greetings匹配任何非空的字符串(包括换行符)* 不 * 包含!
,从而防止匹配输入中的!
字符。至于你尝试了:
interface (\S+)
从 * 第一个 *interface
块开始匹配,然后.*?
成功匹配后续 *interface
块中的任何文本 *,直到找到access-session port-control force-authorized
文本。也就是说,您因此捕获了 * 第一个 * 接口块的名称,而不是与感兴趣的文本相关联的名称。.*
,.*?
的 * 非贪婪 * 形式,并不能 * 保护您在匹配(最接近的,由于非贪婪)后续子表达式(access-session port-control force-authorized
)之前 * 再次 * 匹配前面的子表达式(interface (\S+)
)(假设匹配了 * 任何 * 字符串)。一个完整的PowerShell示例(注意,输入必须 * 作为一个单一的多行字符串 * 提供,因为你想匹配 * 跨行 *):
型
上述输出
'GigabitEthernet1/0/45'
,如所需。