【问题标题】:How to find identify blocks that do not contain specific word between brackets如何在括号中查找不包含特定单词的标识块
【发布时间】:2021-08-20 03:36:57
【问题描述】:

我是正则表达式的新手,我有一个问题。是否可以使用正则表达式来识别两个特定字符之间不包含特定单词的块?

我想突出显示以 action、part、systempart 或 field 开头的所有块,然后是任何字符,然后是左括号。然后突出显示是否在下一个右括号之前不包含“ApplicationArea”。

我一直在努力,这就是我能做到的:

(action|part|systempart|field)\((.)*(\s)*(\n)*(\{)[\s]*(?![\s]*(ApplicationArea.*))(([\s\S\r^}]*?)\})

但这仅在 ApplicationArea 是左括号之后的第一个时才突出显示。

Example

            field("Max. Dep Bases"; Rec."Max. Dep Bases")
            {
                ApplicationArea = Basic, Suite;
                ToolTip = 'Specifies the value of the Max. Dep Bases field';
            }
            field("Suggested Value to Adjust"; Rec."Suggested Value to Adjust")
            {
                ToolTip = 'Specifies the value of the Suggested Value to Adjust field';
            }
            field("Adjust Depreciation"; Rec."Adjust Depreciation")
            {
                ToolTip = 'Specifies the value of the Adjust Depreciation field';
                ApplicationArea = Basic, Suite;
                ToolTip = 'Specifies the value of the Adjust Depreciation field';
            }

【问题讨论】:

  • 答案成功了吗?

标签: regex dynamics-business-central dynamics-al


【解决方案1】:

如果外圈之间不能有{}

\b(?:action|(?:system)?part|field)\([^()]*\)\s*\n{(?![^{}]*\bApplicationArea\b[^{}]*})[^{}]*\}

Regex demo

另一个选项可能是匹配字符串开头的开始和结束花括号,以及不包含 ApplicationArea 的所有链接。

\b(?:action|(?:system)?part|field)\([^()]*\)\s*\n{(?:\n(?!}$|.*\bApplicationArea\b).*)\n}

Regex demo

【讨论】:

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