首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多行字符串中匹配字符串的正则表达式

在多行字符串中匹配字符串的正则表达式
EN

Stack Overflow用户
提问于 2021-08-30 21:48:59
回答 2查看 83关注 0票数 1

我在文本文件中有一些字符串。

代码语言:javascript
复制
line con 0
 session-timeout 10 
 exec-timeout 10 0
 privilege level 15
 logging synchronous
 login authentication console-in
 transport preferred none
 stopbits 1
line vty 0 4
 session-timeout 30 
 exec-timeout 30 0
 logging synchronous
 transport preferred none
 transport input ssh
 transport output ssh
line vty 5 15
 session-timeout 10 
 exec-timeout 10 0
 logging synchronous
 transport preferred none
 transport input ssh
 transport output ssh

我在找/匹配

代码语言:javascript
复制
session-timeout 10
exec-timeout 10

仅在带有Regex的line con 0下。

line con 0.*\n(.*\n)*.*session-timeout 10.*\n(.*\n)*.*exec-timeout 10也会抓住

代码语言:javascript
复制
vty 5 15
 session-timeout 10
 exec-timeout 10

有办法做得更好吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-30 22:28:39

如果2行session-timeout 10exec-timeout 10应按该顺序出现,则可以使用2个捕获组。

根据捕获组值,确保它前面的行不交叉匹配,例如,第一次匹配的是line,第二次匹配的是session-,第二次匹配的是exec-

代码语言:javascript
复制
^line con 0(?:\r?\n(?!line | session-).*)*\r?\n[\p{Zs}\t]*(session-timeout 10).*(?:\r?\n(?!line| exec-).*)*\r?\n[\p{Zs}\t]*(exec-timeout 10)\b
  • 字符串的^开始
  • line con 0匹配
  • (?:\r?\n(?!line | session-).*)*匹配不以linesession-开头的所有行
  • \r?\n[\p{Zs}\t]*匹配换行符和可选空格或制表符
  • (session-timeout 10)捕获组1,匹配字面意思(或使用[0-9]+匹配1+数字)
  • .*与行的其余部分匹配
  • (?:\r?\n(?!line| exec-).*)*匹配不以lineexec-开头的所有行
  • \r?\n[\p{Zs}\t]*匹配换行符和可选空格或制表符
  • (exec-timeout 10)捕获组2,匹配字面意思
  • \b阻止部分匹配的单词边界

查看regex 101演示.NET regex演示(单击"Table“选项卡查看组)

票数 1
EN

Stack Overflow用户

发布于 2021-08-30 21:55:20

这是因为贪婪行为是正则匹配的默认行为(它试图在匹配模式的同时尽可能扩展匹配)。在量词后添加?+*解决了贪婪的问题。

因此,请使用以下模式:

代码语言:javascript
复制
line con 0.*?\n(.*?\n)*?.*?session-timeout 10.*?\n(.*?\n)*?.*?exec-timeout 10

尽可能少的线条匹配。

相配

代码语言:javascript
复制
line con 0
 session-timeout 10 
 exec-timeout 10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68990677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档