首页 > 解决方案 > 正则表达式解决方法在lookbehind内无限重复

问题描述

我试图在 Intellij 正则表达式搜索中以一行开头value_to_match"attribute": "type"以 a 开头(在某些时候)匹配文本。"marketTypeId": 123456789

在以下文本中,搜索应该value_to_match只匹配。

    {
      "marketTypeId": 123456789,
      "description": "Market description",
      "periodType": "MATCH",
      "periodInstance": 1,
      "feedMappingData": [
        {
          "outcomeIdFeedcodeMap": {
            "2": "123456789001",
            "1": "123456789002"
          },
          "conditions": [
            {
              "element": "Market",
              "attribute": "type",
              "condition": "EQUALS",
              "value": "value_to_match"
            },
            {
              "element": "Market",
              "attribute": "traded_pre_match",
              "condition": "EQUALS",
              "value": "true"
            }
          ]
        },
    {
      "marketTypeId": 12121212,
      "description": "Market description",
      "periodType": "MATCH",
      "periodInstance": 1,
      "feedMappingData": [
        {
          "outcomeIdFeedcodeMap": {
            "2": "12121212001",
            "1": "12121212002"
          },
          "conditions": [
            {
              "element": "Market",
              "attribute": "type",
              "condition": "EQUALS",
              "value": "value_NOT_to_match"
            },
            {
              "element": "Market",
              "attribute": "traded_pre_match",
              "condition": "EQUALS",
              "value": "true"
            }
          ]
        },

我一直在尝试对条件使用lookbehind,但似乎Intellij 正则表达式搜索不支持lookbehind 内的无限重复。对于这种情况有什么解决方法吗?

标签: regexregex-lookarounds

解决方案


使用 Intellij 和积极的后视

Intellij 中使用的正则表达式:

(?s)(?<="marketTypeId":\s123456789,.{1,500}"attribute":\s"type",.{1,100}"value":\s")value_to_match(?=")

笔记:

Dotall 模式也可以通过嵌入式标志表达式 (?s) 启用

在参考中阅读有关此标志表达式和正则表达式外观的更多信息:

https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html

使用 Intellij 版本 2020.2

Intellij 和匹配的图片:

在此处输入图像描述

可以在此处阅读有关 Intellij 和匹配的更多信息:

正则表达式有没有办法抓住第一个单词并替换引用的部分?


推荐阅读