2015-12-22 69 views
1

瀏覽器考慮的一個<option>選擇在默認情況下,如果它有selected="selected"屬性。但是,即使該屬性值被省略,這也可以工作。如何搭配HTML「中選擇」選項時的preg_match

所以

<option selected="selected" value="1">value text</option>

和這個作品

<option selected value="1">value text</option>

我的問題是怎麼寫的,這兩個條件相匹配上述正則表達式模式,但永遠不匹配像

<option value="the devil with **selected** ">value text</option>

編輯:我忘了提一些條件仍然被認爲是有效的XHTML,像選擇=「選擇」,或選擇=選擇,甚至選擇=選擇的

+0

我知道,正則表達式是不完美的,如果有的話有用,解析XHTML。但在我的情況下,沒有辦法使用其他工具,如XML解析器 – rahmanisback

+0

Sry這樣說,但我不會做任何想法,然後我可以看到你自己的嘗試,這是行不通的。你知道應該出現什麼樣的東西,所以我沒有理由去做你的工作。 ;) – dryman

+0

我不認爲selected = selected是有效的XHTML。 – Amarnasan

回答

0

隨着PCRE(其中PHP使用)這工作:

<option.*?\s(?:selected(?:=\"selected\")?)\s.*?> 
# look for <option literally 
# followed by anything (non greedy) and a whitespace(!) 
# open a non capturing group and look for selected, eventually followed by ="selected" 
# close the group, followed by a whitespace 
# followed by anything (non-greedy) and the closing tag 

a regex 101 demo這裏。此外,閱讀評論,那裏有一個很好的提示(使用DomDocument等)。

+0

不幸的是,匹配'<選項值=「這不是選定的屬性」>值文本' – rahmanisback

+0

是真的。你能給出你期望的輸入字符串的概述嗎?而**爲什麼**正是使用體面的DOM解析器不是一個選項? – Jan

+0

我處理可能爲自動化測試過程打亂或格式不正確的文檔。這是一個複雜的場景。但總的來說,我決定放棄正則表達式,並去DomDocument,我不知道它會處理不正確的XHTML。對於你的其他問題,我在問題中提到,我想要的只是以典型瀏覽器的任何格式檢測該屬性。 – rahmanisback