2015-11-05 48 views
1

我有一個正則表達式我已經在這個網站涵蓋了我大部分的測試案例中發現的修改版本:嘗試選擇從PHP文件的所有的img標籤不配備ALT

(<img(?!\s*.*?\s*alt)[^>]*)(>) 

This可以幫助理解正則表達式更好)

但是,我的解決方案在標籤結束之前捕獲 - >和?>。

的實例當前假陽性:

<img src="<?php echo $value->Picture; ?>" height="150" alt="<?php echo $value->FullDisplayName; ?>" /> 

代碼結束於 - $值後>,因此不會看到ALT後來

我還沒有想出一個辦法來排除? >和 - >在代碼中搜索結尾>(或/>)時。如果有人擅長Regex's並能幫助我,請告訴我一個替代解決方案。

選的答案

(<img(?:(?!alt)(.|\n))*(\/\s?|["']|\s)>) 

稍加修改,包括這兩種風格的報價

+1

看到http://stackoverflow.com/editing-help格式化您的信息,包括郵件(不鏈接)在你的代碼 –

回答

0

嘗試的...

(<img(?:(?!alt).)*(\/\s?|"|\s)>) 

(提供所有的圖像元素是自閉 - 帶或不帶斜槓)

如果包括換行符...

(<img(?:(?!alt)[\s\S])*(\/\s?|"|\s)>) 
+0

不是每一個圖像以/結尾,所以這不起作用。另外我不確定這是否正確穿越多線 –

+0

啊。不,它沒有。我會再看一次! –

+0

更新 - 給一個去! –

0

這或許可以得到優化,但我想首先要保證適當的功能:

(<(?:(?:[^a<>?]+|a(?!lt=))*+<\?(?:[^>?]+|\?(?!>)|>)*+\?>)*+(?:[^?>a]+|a(?!lt=))*+>) 

Regex101 demo 1revision 2它有更多的測試用例。

拋出其他測試用例,以確保正在處理其他類型的邊緣案例。

或者:

(<(?!\?)(?:[^\/a]+|a(?!lt=))*+\/>) 

Regex101 demo 2

+0

這些都不起作用,並且拋出許多誤報。 –

+0

您能否指出誤報? – OnlineCop

相關問題