限制正则​​表达式的搜索范围

限制正则​​表达式的搜索范围

我有一长串的单词、字符和新行,如何告诉正则表达式仅搜索列表中两个精确单词之间的文本?

这就是我想出的但它并没有停止搜索”

(?!color).*id":(.*?),\s.*name": "(.*?)",\s.*\s.*miles

例如:我希望 REGEX 返回以下内容并在再次到达单词 color 后停止搜索。

火柴:

1159 SAM
1597 ROBERT
1423 CARLOS

代码:

我有一长串的单词、字符和新行,如何告诉正则表达式仅搜索列表中两个精确单词之间的文本?

例子:

我希望 REGEX 返回以下内容并在再次到达单词颜色后停止搜索。

火柴:

1159 SAM
1597 ROBERT
1423 CARLOS

代码:

{
"groups": [{
    "id": 113,
    "name": "CAPISCO",
    "color": "#07380f",
    "params": [{
        "id": 1559,
        "name": "SAM.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
}, {
        "id": 1597,
        "name": "ROBERT.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
}, {
        "id": 1423,
        "name": "CARLOS.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
"id": 113,
    "name": "CORBAEU",
    "color": "#09854",
 "id": 113,
    "name": "SALUD",
    "color": "#07380f",
        "id": 1012,
}, {


            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
}, {
        "id": 98,
        "name": "ANNIE.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
}, {
        "id": 1367,
        "name": "PETE.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"

        "id": 866,
        "name": "Jay.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"
}, {
        "id": 15933,
        "name": "JEAN.",
            "km": "1500",
            "miles": "0"
        }, {
            "km": "900",
            "miles": "0"
        }, {
            "km": "320",
            "miles": "0"

答案1

Regex 是一种模式匹配语言。使用它,你只需要定义一个模式。没有办法保持计数器来记住匹配的数量 - 这完全取决于使用正则表达式引擎的实现 - 例如,你可以用任何支持正则表达式的编程语言编写一些代码来保持匹配的数量并在匹配后停止n已找到匹配项。您只能通过模式重复来构建一个正则表达式,该正则表达式将与给定组精确匹配预定义的次数。换句话说 - 重复您的模式三次,以获得三个匹配项。例如:

  • 匹配的基本模式:(expr)
  • 边界词之间的一个匹配的模式:boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
  • 边界词之间的两个匹配的模式:boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword
  • 边界词之间的三个匹配的模式:boundaryword(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?(expr)(?:.*?\s)+?boundaryword

等等... 在您的情况下,“boundaryword”是“color”。

正则表达式无法让它找到未知数量的匹配项,然后在给定的单词处停止。典型的正则表达式方法要么只查找第一个匹配项,要么查找文档中的所有模式匹配项。您的问题需要自定义实现。在编程语言中,您可以编写一个循环,首先匹配边界字的位置,然后从那里匹配您的模式,并继续匹配该模式以查找连续元素,直到接近下一个边界字,然后停止。

相关内容