【问题标题】:How do I use Regex to match every occurrence of a string between two surrounding strings exclusive of the surrounding strings?如何使用正则表达式匹配两个周围字符串(不包括周围字符串)之间每次出现的字符串?
【发布时间】:2015-04-12 05:30:29
【问题描述】:

我正在努力使用正则表达式。这是我根据 hwnd 的建议(解决了我之前的问题)使用的命令(在 Windows 上运行 Cygwin):

grep -Po '(?<="id":)[^,]+' regex_test.txt

如何更改正则表达式以使创建的匹配以 ,{"id"::[{"id": 开头?遗憾的是,当前表达式还捕获了前缀为 :{"id":

的不需要的 ID

输入名为“regex_test.txt”的文本文件:

reason":{"id":25549177,"pattern":null},"iphone":[{"id":2411977008,version":null},{"id":2430057923,

输出:

25549177

2411977008

2430057923

期望的输出:

2411977008

2430057923

请让我知道您对这些问题的看法。

【问题讨论】:

  • @Сухой27 这个问题似乎不是重复的:它是关于 [pcre] 和 [grep] 的! (shell 使用,而不是 perl。)据我所知。此外,lookaround 是一个有趣的功能,没有显示在指向假冒副本的有意链接中。

标签: regex grep


【解决方案1】:

您可以使用 Positive Lookbehind 断言(如链接的answer 所示):

grep -Po '(?<="id":)[^,]+' regex_test.txt

Ideone Demo

【讨论】:

  • grep -Po '"id":\K[^,]+' regex_test.txt
  • perl -nE 'say $&amp; if /"id":\K[^,]+/' regex_test.txt
  • @hwnd 我遇到了更多问题。如何更改您的正则表达式,以便创建的匹配以 ,{"id"::[{"id": 开头(比当前更具体的条件“id”: ? 遗憾的是,当前表达式还捕获了以 :{"id": 开头的不需要的 ID。
  • @Sonia,试试(?&lt;=[[,]{"id":)[^,]+
  • @hwnd 成功了。我试图逃避 [ { 字符。谢谢!
猜你喜欢
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多