我想寫一個匹配字符串的正則表達式。爲簡單起見,我只關心用雙引號(「)的時刻串用於匹配文字字符串的正則表達式
到目前爲止,我有這樣的:
這適用於大多數字符串,但是當有一個轉義雙引號,如失敗這樣的:
"a string \" with an escaped quote"
在這種情況下,它僅匹配到逃脫報價
我已經試過幾件事情,讓一個逃脫的報價,但到目前爲止,我一直不成功,任何人都可以給我。一隻手?
我想寫一個匹配字符串的正則表達式。爲簡單起見,我只關心用雙引號(「)的時刻串用於匹配文字字符串的正則表達式
到目前爲止,我有這樣的:
這適用於大多數字符串,但是當有一個轉義雙引號,如失敗這樣的:
"a string \" with an escaped quote"
在這種情況下,它僅匹配到逃脫報價
我已經試過幾件事情,讓一個逃脫的報價,但到目前爲止,我一直不成功,任何人都可以給我。一隻手?
我已經成功地解決它自己:
"\"(\\.|[^\"\\])*\""
非常簡單和優雅!!但等一下!!如果(想要在字符串中使用引號字符,而不是內部引用的文本塊?我看不出有一個IGNORING的方式,它會錯誤地「啓動」一個引用的文本塊......你可以使它們全都是雙引號('「」'),這將匹配作爲空引用並被丟棄(或者還原爲單引號...) - 這將需要額外的文檔:「use」用來表示一個引號字符而不是引號,但用「」「來表示引用字符r在引號之外「... –
試試這個:
"[^"\\\r\n]*(?:\\.[^"\\\r\n]*)*"
如果你想多行轉義字符串可以用:
"[^"\\]*(?:\\.[^"\\]*)*"
POSIX(假設ERE)支持非 - 收集羣體(你的表達中的'(?:')? –
通常要接受逃脫任何東西。
" [^"\\]* (?: \\. [^"\\]*)* "
會是最快的。
"[^"\\]*(?:\\.[^"\\]*)*"
壓縮。
POSIX不支持AFAIK,如果沒有它,真的沒有辦法只用正則表達式來做到這一點。然而,根據POSIX模擬器我有(沒有訪問本地環境或庫),這可能會關閉,在某些情況下:
"[^\"]*"|"[^\]*\\|\\[^\"]*[\"]
它將捕捉逃脫的報價後,之前的一部分且該部分...與此源字符串(忽略換行,一個想象這一切都在一個字符串):
I want to match "this text" and "This text, where there is an escaped
slash (\\), and an \"escaped quote\" (\")", but I also want to handle\\ escaped
back-slashes, as in "this text, with a \\ backslash: \\" -- with a little
text behind it!
它將捕捉這些羣體:
"this text" -- simple, quoted string
"This text, where there is an escaped slash (\ -- part 1 of quoted string
\), and an \ -- part 2
"escaped quote\ -- part 3
" (\ -- part 4
")" -- part 5, and ends with a quote
\\ -- not part of a quoted string
"this text, with a \ -- part 1 of quoted string
\ backslash: \ -- part 2
\" -- part 3, and ends with a quote
進一步的分析,你可以將它們組合起來,酌情:
"
結束,那麼它是對自己\
結束,那麼它需要是緊跟另一場比賽組我認爲這就是您需要的所有分析 - 但一定要測試它!
讓我知道這個想法是否有用!
編輯: 附加說明:僅僅是明確的,對這個工作的所有報價的整個源字符串中必須轉義,如果他們不被用作分隔符,和反斜槓必須普遍地逃過以及
你嘗試過什麼樣的事情呢? – ewok
'「\」([^ \「] | \\\」)* \「」' –
請始終指定您打算使用的語言或工具。 [正則表達式的實現有所不同](http://www.regular-expressions.info/refflavors.html),一種語言的解決方案可能不適用於另一種語言。 –