2014-03-28 174 views
0

我找width="750"width='750'當有一個正則表達式尋找width=["|\']([^"]*)["|\']正則表達式匹配的單引號,雙引號和/或空間

的偉大工程,但它不匹配width=750

所以我得到了它據width=["|\']?([^"]*)["|\']用於可選的第一次報價,但比賽只是繼續進行,不會只返回750

+0

你正在使用的語言或正則表達式引擎是什麼? – Jerry

+0

當您詢問有關正則表達式的問題時,識別您使用的是哪種正則表達式非常重要,因爲它們所支持的功能和語法千差萬別,而且經常不存在「一刀切」類型的答案。識別你正在使用的那一個可以避免浪費用你選擇的方言不支持的表達式回答的人的時間。謝謝。 –

回答

1

字符類別([])不使用|來表示or;他們自動地or應有盡有。你也不必逃避單引號(除非你用單引號括住整個表達式)。你想:

["' ]?([^"' ]*)["' ] 
1

試試這個:

width\s*=\s*(?:["\']([^"\']*)["\']|\S+) 

我剛加了\S+,在等號爲OR條件後處理700。您也不需要將|放置在字符類中[]

\s*表示可選空白(零次或多次)。

+0

謝謝,但這不會返回750,除非它在引號 – keeg

+0

@keeg從上述正則表達式中去掉'?:'來捕獲數字。對於引號,你將在group1'「750」'和group2'750'中獲得值 –

1

如果您使用的是支持反向引用的工具或語言,你應該能夠使用以下命令:

width=("|'|)(\S*)\1 

這將嘗試匹配一個單引號,雙引號,或第一個捕獲組爲空字符串,然後最後的\1將成爲第一個捕獲組的任何內容。該值將始終是來自第二個捕獲組的內容。

我也將[^"]*更改爲\S*,所以這將匹配任意數量的非空白字符。這是必要的,以確保您的匹配不會在字符串末尾沒有引號時結束。

例子:http://rubular.com/r/Xg8ageZmgy

0

哪種正則表達式語言是您使用?不同的語言具有不同的語法細節,所以有人可能會給你一個適用於他們環境但不適合你的答案。

例如,我複製了您的表達式,並在Emacs中的某些文本上嘗試了它。它發現在這個文本匹配:

width=|750| 

這是因爲Emacs的正則​​表達式不使用「|」用來表示「['和']'括號內的」或者「的字符;它將它解釋爲表達式可能匹配的字符的另一個示例。

此外,它看起來像你的表達並不總是在這個例子中,750後停止:

width='750' 

相反,如果有一個「「」字符後面輸入,它匹配一切從750,直到那個角色(如果在輸入後面有一個''',它和我之前在Emacs中的例子一樣。)

也將匹配在這750(注意是不匹配的引號):

width='750" 

這是個問題,或者是一個可以接受的結果嗎?

相關問題