為什麼正規表示式跳過一些結束括號並在之後匹配它們
考慮這個例子:
他走進咖啡館陀思妥耶夫斯基,說:“晚上好。”
這裡我們有兩組引號。讓我們假設我們想要匹配兩者,以便我們的正規表示式匹配 Dostoevski
和 Good evening.
起初,你可能會想要保持簡單:
".*" # matches a quote, then any characters until the next quote
但它不起作用:它匹配 Dostoevski
中的第一個引用,直到 Good evening.
中的結束引用,包括 and said:
部分。 Regex101 演示
為什麼會這樣?
發生這種情況是因為當遇到 .*
時,正規表示式引擎將所有輸入吃掉到最後。然後,它需要匹配最終的 "
。因此,它從匹配結束時退後,放開匹配的文字,直到找到第一個 "
- 當然,這是匹配中的最後一個節目,在節目結束時。
如何防止這種情況並與第一個引號完全匹配?
使用 [^"]*
。它不會吃掉所有的輸入 - 只有在第一個 "
之後,就像需要的那樣。 Regex101 演示