2012-04-25 268 views
2

嘗試捕獲名稱=和值=美國或無(如果選擇=「選定」不包括在內)。鑑於以下(較大$頁面的一部分):如果,那麼,否則正則表達式 - 如何寫條件

$page = ' 
<select name="country" ><option value="NONE">Select One</option>  
<option value="AE">UNITED ARAB EMIRATES</option> 
<option value="GB">UNITED KINGDOM</option> 
<option value="US" selected="selected">UNITED STATES</option> 
<option value="UY">URUGUAY</option> 
<option value="UZ">UZBEKISTAN</option> 
<option value="ZW">ZIMBABWE</option></select>'; 

編輯1這種模式,如果沒有的選項被選中不會拿起NONE。

$pattern = '/select name="([a-zA-Z]*)"\s?>[\w\W]*value="([A-Z]{2,4})"(selected="selected">)?/' 

所以,我正在尋找一種模式。

+6

使用HTML解析器,而不是正則表達式。 – nickb 2012-04-25 17:09:12

+1

沒有'name'屬性... – powtac 2012-04-25 17:09:47

+1

謝謝nickb,我已經讀了很多。問題是關於正則表達式。更具體地說,關於持續的非真實結果。有什麼建議? – David 2012-04-25 17:18:15

回答

1

的語法那麼,如果在PHP否則正則表達式是:

(if 'selected=' found) then find pattern  | else find this pattern 
    (if condition)  then regex   | else regex 
(?(?=.*selected=)value="([A-Z]+)"\s+selected=|value="(NONE)">) 

.*是必要的條件是真實的。

0

它必須是一個正則表達式嗎?

我建議這樣拆分起來:

  • 匹配的元素
  • tryMatch的「選擇」屬性
  • 根據結果進行 - 我不知道是什麼當你想要哪個值的時候,邏輯和你的描述不太相同。但無論哪種方式,獲取價值或名稱屬性都應該很容易。

這種方法的好處是你正在研究html代碼的一部分,而且它的錯誤更少。

編輯:

BTW:你怎麼知道它永遠不會計算爲真?它似乎工作打算(即符合「選擇」或「選擇名稱=‘國家’)在這裏
http://www.pagecolumn.com/tool/pregtest.htm

(你需要躲避報價(?(?=selected=\"selected\")select|select name=\"([a-zA-Z]*)\")那裏使用它)

EDIT2

我仍然無法幫助你,如果再別的,而是根據你的解釋我可以建議是:

<select name="([^"]*)".*?(?!</select>)<option value="[^"]*" selected="selected"|<select name="([^"]*)"\s*>\s*<option value="([^"]*)"> 
  • 所以,tryMatch選擇,如果失敗的比賽只是第一個選項
+0

我打算了解if條件。自發布問題以來,我已開始着手處理您的建議。對我來說,使用|有一個長的正則表達式是很好的在選擇之間。 – David 2012-04-25 19:56:15

+0

謝謝喬安娜。請參閱我的編輯1.根據預先選定的內容,希望獲得名稱=「(國家)」和值=「(美國)」或值=「(無)」的模式。所需捕獲字符的括號。 – David 2012-04-25 20:04:42

+0

關於if語法,我一定是用錯了。使用您提供的轉義字符串,結果總是「其他」一方。我正在創建'if',因爲我無法讓其他人(編輯1)工作。無論哪種方式都很好。只要尋找'名字'和'價值'。 – David 2012-04-25 20:25:40