我正在使用正则表达式,它将匹配以下两种语法...
1
aaa accounting system default
action-type start-stop
group tacacs+
2
aaa accounting system default start-stop group tacacs+
到目前为止,我所做的最好的是......
^aaa accounting system default (\n action-type |)start-stop(\n |) group tacacs\+
上面的Regex会匹配语法编号2而不是1吗?拉出我的头发! (我知道它可能很简单,但我是一个正则表达式新手)任何想法? 第2行和第2行的开头有空格。语法片段1中的3,但是没有显示以真实地查看语法的呈现方式,请查看下面的Regex101链接。谢谢!
这是在Regex101 ......
答案 0 :(得分:3)
它不起作用,因为您的可选组中有多余的空格:
^aaa accounting system default(\n action-type|) start-stop(\n|) group tacacs\+
您可以使用非捕获组(?:...)
和可选的量词?
以更好的方式编写它:
^aaa accounting system default(?:\n action-type)? start-stop\n? group tacacs\+
(以这种方式避免无用的捕获)
答案 1 :(得分:2)
要匹配多行,您需要DOTALL
标记:
/(?s)\baaa accounting system default.*?group tacacs\+/
否则:
/\baaa accounting system default.*?group tacacs\+/s
答案 2 :(得分:2)
您可以使用匹配任何空格的\s
替换模式中的常规空格:
'~^aaa\s+accounting\s+system\s+default(?:\s+action-type)?\s+start-stop\s+group\s+tacacs\+~m'
请参阅regex demo
另外,我进行了一些其他优化,以便匹配两种类型的字符串:
^
- 匹配行的开头(由于/m
)修饰符aaa\s+accounting\s+system\s+default
- 匹配aaa accounting system default
\s+
与一个或多个空格匹配的序列(?:\s+action-type)?
- 可选的 action-type
(在action-type
之前有一个或多个空格)\s+start-stop\s+group\s+tacacs\+
- 匹配单词之间有1个或多个空格的 start-stop group tacacs+
。