【问题标题】:Regular expression for matching patterns [] or [][] explicitly.?显式匹配模式 [] 或 [][] 的正则表达式。?
【发布时间】:2018-04-13 23:07:38
【问题描述】:

我正在为用于基准测试实验的脚本语言编写解析器。我在其中引入了一维和二维数组的概念,并尝试编写一个正则表达式,以便在语句中显式匹配[][][]出现,并相应地在内部处理数组值的存储和检索。

我写了一个匹配的正则表达式

[][],和

[] 明确,但是

问题是,在第二种情况下,我的 REGEX 依赖于在匹配[] 之前匹配任何编程语言中的变量定义模式。

谁能建议另一种为 2nd 编写 REGEX 的方法,它独立于匹配它之前的变量模式,并且应该只匹配一次出现的 [] 种类?

例如:

第二个正则表达式不应匹配字符串中的任何子字符串:

array1[123][345]

相反,它应该只匹配

array2[12]

我试过[],但它部分正确,因为它也匹配

数组[1][2]

prefix[23423][23435] 我不想要它。

有人可以帮忙,如何解决这个问题?

【问题讨论】:

    标签: java regex regex-negation regex-lookarounds regex-group


    【解决方案1】:

    你可以使用

    (?<!])\[\d+](?!\[)
    

    请参阅regex demo

    详情

    • (?&lt;!]) - 如果在当前位置的左侧紧邻 ],则匹配失败
    • \[ - 一个[
    • \d+ - 1 位以上
    • ] - 一个 ] 字符
    • (?!\[) - 如果在当前位置的右侧有一个 [,则匹配失败。

    【讨论】:

    • 非常好,是一个很好的例子,说明了如何解释答案中给出的正则表达式。我看到太多的正则表达式答案只说 "Use this: "
    • @Anubhav 很高兴它对你有用。请考虑通过单击左侧的 ✓ 来接受答案。
    【解决方案2】:

    可以试试这个。

    [\[|\]]
    

    匹配所有出现的地方。

    【讨论】:

    • 那不会解决目的,只会让情况变得更糟。请看here
    • 这很奇怪。我用 C# 编写了一个程序并为我工作。
    【解决方案3】:

    试试这个

    (?<!\])(\[\d+\])(?=[^[])
    

    解释

    (?<!\]) - lookbehind for any character diferent from "[" (this also consumes the caracter so they won´t be on the match)
    
    (\[\d+\]) - find digits surrounded by []
    
    (?=[^[]) - lookahead for any character that isn't "[" (this won't be taken in the match)
    

    examples

    试试这个

    (?<!\])(\[\d+\])(?>\s)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多