gpt4 book ai didi

组内带有\n 和\s 的正则表达式未显示预期匹配

转载 作者:行者123 更新时间:2023-12-01 13:14:30 27 4
gpt4 key购买 nike

我有以下正则表达式:

/interface\s\w+\d(\/\d+)+(\n\s([\w\d\.\-]+\s?)+)+/

为什么它只匹配下面的前两行,而不是其余的命令?
interface FastEthernet0/2
description Lab
switchport access vlan 88
switchport mode access
switchport block multicast
switchport block unicast
switchport port-security
srr-queue bandwidth limit 60
!

最佳答案

它与其余命令不匹配,因为在重复组中 (\n\s([\w\d\.\-]+\s?)+您正在匹配可选的空白字符 \s?将匹配到 description和下面的空白字符。然后内部组将重复并匹配Lab\s?将匹配换行符。

该组尝试再次重复,只是这一次 [\w\.\-]+不能匹配。外部组现在尝试匹配 \n\s 中的换行符但这已经与之前的 \s 匹配了所以比赛停止。

您可能会做的(如果您不需要捕获组使它们不捕获 (?: )是重复一个空格,后跟字符类 (?: [\w.-]+)*匹配直到字符串的结尾。

然后将再次重复,为您提供除以 ! 开头的行之外的所有行

例如:

interface\s\w+\d(?:\/\d+)+(?:\n\s+(?:[\w.-]+(?: [\w.-]+)*)+)+
^^^^^^^^^^^^^

Regex demo

请注意 \w也匹配 \d并且您不必在字符类末尾转义点和连字符,这可以缩短为 [\w.-]+
更有效的解决方案可能是从接口(interface)部分开始匹配,然后匹配以下所有不以仅包含 ! 的行开头的行。
interface\s\w+\d(?:\/\d+)+(?:\n(?!!$).*)*

Regex demo

关于组内带有\n 和\s 的正则表达式未显示预期匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56796834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com