我想在多行中匹配以下模式
- 模式以“PAT_A”開頭
- 模式以第一個“;”結尾 在“PAT_A”之后
- 模式在“PAT_A”和“;”之間包含“PAT_B”
- 模式在“PAT_A”和“;”之間不包含“NOT_MATCH_THIS”
例如,這應該匹配
PAT_A_YYY(
OK,
PAT_B
);
這不應該匹配。
PAT_A_XXX(
NOT_MATCH_THIS,
PAT_B
);
我設法滿足了前三個要求
(PAT_A[^;]*?)(\bPAT_B\b)([^;]*;)
其中組用于提取匹配的不同部分。
但是,我沒有成功排除包含“NOT_MATCH_THIS”的匹配項。
我已經檢查了關于否定前瞻的帖子“如何否定正則運算式中的特定單詞? ”。但是,似乎那里的答案與整行匹配,而不是上述模式要求。而且我不確定我應該如何將負前瞻合并到我的正則運算式模式中。
有什么辦法可以匹配滿足所有四個要求的正則運算式?
uj5u.com熱心網友回復:
我手邊沒有 RegEx 解釋器,但你可以試試這個:
(PAT_A[^;]*?(?!NOT_MATCH_THIS))(\bPAT_B\b)([^;]*;)
或者可能:
(PAT_A[^;]*?(?!NOT_MATCH_THIS)[^;]*?)(\bPAT_B\b)([^;]*;)
uj5u.com熱心網友回復:
你可能會用
^PAT_A[^;\n]*(?:\n(?![^\n;]*NOT_MATCH_THIS)[^;\n]*)*\n[^;\n]*PAT_B[^;]*;
在部分,模式匹配:
^字串的開始PAT_A字面匹配[^;\n]*可選匹配除;或換行符以外的任何字符(?:非捕獲組(作為一個整體重復)\n(?![^\n;]*NOT_MATCH_THIS)匹配換行符,并斷言該字串不包含NOT_MATCH_THIS和不包含 a;或換行符以保持在同一行[^;\n]*如果前面的斷言為真,則匹配整行(不包含 a;)
)*關閉非捕獲組,并可選擇重復匹配所有行\n[^;\n]*匹配換行符和除;或換行符以外的任何字符PAT_B[^;]*;然后匹配 PAT_B 后跟任何字符,除了;后跟匹配;
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317351.html
