捕获长字符串上的特定字段

时间:2014-06-21 00:45:18

标签: regex

我有点卡在这里......

我正在努力解析一些看起来像这样的信息(CouchDB数据库内容):

rows=[{"id":"AGO","key":"AGO","value":{"rev":"1-78f969c9a3f590d11c78d711558b393d"}},{"id":"ALB","key":"ALB","value":{"rev":"1-ecb0ea637ac64ed98d895a268dbe1edf"}},{"id":"ARE","key":"ARE","value":{"rev":"1-8b863c318c3f818f6597b71b7e336535"}},{"id":"ARG","key":"ARG","value":{"rev":"1-a443a4968d8345f723a8c4c7dbd11239"}},{"id":"ARM","key":"ARM","value":{"rev":"1-56eebce5411ba54c49258a690fa46c44"}}]

这是一条很长的路线。

我要做的是创建一个可以帮助我获得“id”字段的正则表达式。所以输出应该是这样的:

AGO
ALB
ARE
ARG
ARM

我知道如果我们只有一行("id":"(\w+{3})"),这会很容易,但我怎样才能创建一个在字符串上重复的正则表达式呢?

2 个答案:

答案 0 :(得分:1)

如果您必须在正则表达式中执行该操作,并且您可以访问所显示的字符串中的数据,那么这与您的ID匹配:

(?<="id":")[^"]*(?=")

请参阅demo

  • lookbehind (?<="id":")断言我们前面有"id":"
  • 否定字符类[^"]*与ID匹配:任何不是双引号的字符
  • 前瞻(?=")断言以下是双引号

答案 1 :(得分:1)

如果您的语言支持\K,则下面的正则表达式会捕获所有ID。

\"id":\"\K([^"]*)

DEMO

<强>解释

\"id":\"    #  Matches "id":"

\K          #  Used to discard the previous matches. So "id":" got discarded.

([^"]*)     #  Matches all the characters except " zero or more times.