比方說,我有,我想從一個打開雙引號解析爲一個字符串結束的雙引號:以下正則表達式如何工作?
asdf"pass\"word"asdf
我很幸運地發現,以下PCRE會從開雙匹配-quote到閉雙引號而在中間忽略轉義雙引號(正確地解析邏輯單元):
".*?(?:(?!\\").)"
匹配度:
"pass\"word"
但是,我不知道爲什麼這個PCRE匹配正確的開始和結束雙引號。
我知道如下:?
「=字面雙引號
* =懶惰的零個或多個任意字符匹配
(?:=非捕獲組的開口
(?!\ 「)=斷言它不可能匹配文字\」
。=單個字符
)=非捕獲組的閉合
「=字面雙引號
似乎單個字符和負先行相距相同的邏輯羣組的。對我而言,這意味着PCRE在字符後面說「只要沒有任何字符匹配從雙引號到零或多個字符」,然後再匹配一個字符和一個雙引號。「
然而,根據該邏輯的PCRE不會串都匹配。
有人能幫助我總結我解決此頭?
它如何與「r」匹配?不應該負向前視,以防止它通過字符串中的'\「'感謝幫助我明白,順便說一句 – Nolan
@Nolan看到我的更新 –
'bash'不使用Perl風格的正則表達式,只有POSIX -defined [擴展正則表達式](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04)。 – chepner