[英]PCRE implementing negative lookahead AND behind working together?
我遇到了一個我顯然無法解決的問題。 它涉及 PCRE 實施負前瞻和落后條件,這些條件應該(但顯然不)一起工作。
我有一個字符串,其中包含一個符合 JavaScript 語法的常量。 需要轉換此字符串的語法以符合 JSON 標准。
當我嘗試用引號封裝對象屬性鍵時,我需要將“真實”屬性鍵與數組中包含的字符串區分開來,這些字符串恰好看起來像屬性鍵。
const Const = {
propertyKeyA: "someValue",
propertyKeyB: ["ThisIsMyHeadache:ItShouldNotBeChanged"]
};
{
"propertyKeyA": "someValue",
"propertyKeyB": ["ThisIsMyHeadache:ItShouldNotBeChanged"]
}
$output = preg_replace(
'~(?:^|\b) (?![\'"]) (\w+) (?<![\'"]) :~mx',
'"\1":',
$input
);
這導致:
{
"propertyKeyA": "someValue",
"propertyKeyB": [""ThisIsMyHeadache":ItShouldNotBeChanged"]
}
注意數組定義中的雙引號。 在我看來,這些條件似乎根本不起作用。
有沒有人知道如何解決這個問題? 這將是非常感謝!
最好的,克里斯
您混合了前瞻和后視位置。
(?![\\'"])(\\w+)
等於(\\w+)
因為(?![\\'"])
是一個負面的前瞻並且要求下一個字符不是'
或"
,但是因為下一個模式是\\w
,匹配一個單詞字符,前瞻變得多余。你需要在這里使用負后視, (?<![\\'"]) (\\w+)
。 (\\w+)(?<![\\'"])
是類似的:字符字符不能是'
和"
並且負向后視是多余的。 你想在這里向前看。
你需要使用
'~(?:^|\b) (?<![\'"]) (\w+) (?![\'"]) :~mx'
請參閱正則表達式演示。
正如Wiktor在對我最初問題的評論中所發布的,這是解決方案:
'~(?:^|\b) (?<![\'"]) (\w+) (?![\'"]) :~mx'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.