2013-04-17 160 views
1

我正在爲我的代碼解析器製作正則表達式。我必須承認字符串字面量,和我做了這個表達式:構建正則表達式

"([^"]|(\\"))+"? 

我需要匹配這些情況:

"Some String 
"another string \" string 
"blah blah \" blah " 

這些不是:

"Some String"a 
"blah blah \" blah "b 

它不得不開始

之後應該有任何字符除外

如果有另一個它必須是在年底,或必須用轉義\

我正則表達式所行的工作:(我在測試:如果我有這樣的情況下http://gskinner.com/RegExr/

"asdasdsd\"sadasd 

它僅僅選擇:

"asdasdsd\" 

爲什麼?

非常感謝! :)

+2

如果你想要一個解析器,寫一個解析器 –

+0

我在找:^「([^」] |(\ 「)+([^ \\]」)?$ 現在,它的完美工作! – user1696947

+1

如果反斜槓也被轉義出來會發生什麼?像這樣的''asdasdsd \\「sadasd'?現在第一部分' 「asdasdsd \\」是一個完全封閉的字符串 – RamboNo5

回答

0

你需要扭轉或操作...這裏是蟒蛇

>>> print re.search(r'"(\\"|[^"])+','"asdasdsd\\"sadasd').group(0) 
"asdasdsd\"sadasd 

的原因是,其[^「]第一,吸收了你的反斜槓,然後失敗了,當它擊中報價

"([^"]|(\\"))+"? 

成爲

"(\\"|[^"])+"? 

*注意:我不知道你是否需要'?'因爲你沒有指定一種語言,上面的python實現應該有希望得到你所需要的。

0

你必須使用正則表達式嗎?

如果您只是使用標準的字符串解析toools在您選擇的語言似乎你的情況會更簡單和更清晰。

+0

是的,我正在使用基於常規語言的正則表達式來標記代碼。 – user1696947