【问题标题】:Perl Regular Expression where a word is repeated more than three times non-sequentialPerl 正则表达式,其中一个单词重复超过 3 次非连续
【发布时间】:2018-07-19 20:37:33
【问题描述】:

我目前用这个在logtail中找出我的话

**(?=\b\w{5}\b)\b\w*err\w*\b**

但我需要一个匹配表达式三次/五次以上且不连续的正则表达式。

有什么建议吗?

提前致谢

我没有任何示例数据,因为我拥有的是日志文件。

2018-07-24 10:03:20,610 DEBUG [Thread-3]: [ERROR] 刚刚发生了另一个销毁操作

然后是几行……

然后又是另一个 [ERROR] 消息

所以我的搜索将查找 ERROR,Wintail / Notepad++ 中的突出显示会突出显示错误并仅在日志超过 5 条或更多错误消息时提醒我。

【问题讨论】:

  • 您可以在帖子中添加示例数据和预期输出吗?
  • 亲爱的马特,请阅读搜索词。它包含以“err”开头的单词“w*err”,w{5} 表示 5 个字母的单词 - 错误。
  • 在编辑帖子之前,您拥有的正则表达式是(?=\b\w{5}\b)\b\werr\w\b。这不会匹配以 err 开头的单词。请编辑帖子以添加您正在搜索的示例数据。
  • 是的,可能是在剪切粘贴时,“*”被删除了/可能我犯了一个错误。

标签: regex expression word


【解决方案1】:

由于未提供示例数据和示例字符串,我将提供一个具体示例,其中在同一输入字符串中搜索字符串 str 3 到 5 次。

$String = "str foisdf str wifdoidsfstreoijdsf";

if($String =~ /(str)(.+?\1){2,4}/)
{
    print "Found";
}

在 $String 中搜索 str。第一个捕获组(str) 将捕获\1 中的文本str,第二个组(.+?\1{2,4}) 将匹配至少1 个字符,然后再次匹配str

重复此操作 2 至 4 次。由于str 已经在正则表达式中找到一次,因此总匹配将是 3-5 次。

在我的电脑上进行了尝试和测试,并且可以正常工作。如果您需要非固定文本 str,请尝试在正则表达式中替换 str

【讨论】:

  • 亲爱的 Arun, 感谢您的回答,但这在单行搜索中不起作用。您提到“由于未提供示例数据和字符串”,我的搜索本身包含这个词 - 它的“错误”和“w{5}”表示 5 个字母的词。它只突出显示一次。我需要它匹配 5 次。
猜你喜欢
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多