【问题标题】:Extended regular expressions - Think I might be too restrictive in my search but not sure扩展正则表达式 - 认为我的搜索可能过于严格但不确定
【发布时间】:2013-03-23 20:30:40
【问题描述】:

我正在尝试找出这个扩展表达式,以使用以下参数在 txt 文件中搜索特定行:

  • 包含七位数字的行,
  • 前后用非数字字符包围,
  • 在第三位和第四位之间有一个或多个破折号或下划线。

这些应该匹配:

x555-1212x
x555__1212x
x555-_-1212x 

但这些不匹配:

x999555-1212x
x555-1212999x x999555-1212999x
555-121x
x55-1212
5551212

这是我尝试过的,根据检查脚本,它给了我 7 行中的 5 行

egrep '[^0-9]+[[:digit:]]{3}[-_]+[[:digit:]]{4}[^0-9]+' foo.txt

我不确定我在哪里出错了......我是否过于严格并消除了某些空白字符,如 Tab 或其他东西。有人有什么想法吗?

【问题讨论】:

  • 我不确定你在问什么。正则表达式和示例数据完全符合您对匹配项的英语描述所暗示的内容?
  • 你能举例说明应该匹配但没有匹配的内容吗?
  • 编辑后的帖子中的不匹配仍然完全符合您期望的英文描述。您为什么希望它们匹配?
  • 那些匹配项和不匹配项是您应该寻找或不寻找什么问题的示例,实际上不在文本中......实际文本长 15000 行。
  • 但是根据您的描述,那些不会匹配不应该匹配。您认为问题在哪里?

标签: regex linux expression


【解决方案1】:

由于您对具有您的模式的 感兴趣,您可以在匹配模式中使用 start ^ 和 end $ 正则表达式运算符。

正则表达式:^.*?(\D|^)(\d{3}[-_]+\d{4})(\D|$).*?$
在这里解释演示:http://regex101.com/r/gQ0cE2

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2012-12-31
    • 1970-01-01
    • 2016-09-26
    • 2017-08-10
    • 1970-01-01
    相关资源
    最近更新 更多