2013-10-18 51 views
1

我有一個$html變量包含大量的html代碼,我試圖從輸入中提取某個參數(可以是值,或類等)的值字段基於它的id。來自輸入字段的正則表達式

我試圖找到代碼的一個例子:

<input type="text" autocomplete="" name="confirmedEmailAddress" id="emailaddress" maxlength="60" value="[email protected]" class="txt-box txtbox-m " aria-describedby="" aria-required="true" disabled="disabled" /> 

我試圖構建提取值([email protected])出來的一個正則表達式,告訴它​​找出來的價值<input>其中id="emailaddress" - 在輸入和id之間以及id和value之間使用通配符(唯一可以確定的是輸入在id之前,這是值之前)。

這裏是我當前的PHP代碼(使用preg_match_all因爲它應該成爲我能在那裏有幾個字段的情況下重用一個函數):

$pattern = '<input(.*)id="emailaddress"(.*)value="(.*?)"'; 
preg_match_all('/'.$pattern.'/si',$html,$matches); 

我一直在努力改變,但是我要麼得到的第一個輸入字段或不匹配。任何幫助歡迎!提前致謝。

回答

1

應該是一個相當簡單的一個

$string = '<input type="text" autocomplete="" name="confirmedEmailAddress" id="emailaddress" maxlength="60" value="[email protected]" class="txt-box txtbox-m " aria-describedby="" aria-required="true" disabled="disabled" />'; 

$pattern = '/<input(.*?)id=\"emailaddress\"(.*)value=\"(.*?)\"/i'; 
preg_match_all($pattern, $string, $matches); 
var_dump($matches); 

這給了我:

array (size=4) 
    0 => 
     array (size=1) 
      0 => string '<input type="text" autocomplete="" name="confirmedEmailAddress" id="emailaddress" maxlength="60" value="[email protected]"' (length=126) 
    1 => 
     array (size=1) 
      0 => string ' type="text" autocomplete="" name="confirmedEmailAddress" ' (length=58) 
    2 => 
     array (size=1) 
      0 => string ' maxlength="60" ' (length=16) 
    3 => 
     array (size=1) 
      0 => string '[email protected]' (length=21) 
+0

謝謝!我需要包含id =「emailaddress」,因爲我正在通過包含許多輸入字段的$ html進行搜索,並且需要將其限制在正確的輸入字段。也有可能只獲得在$匹配而不是幾行中返回的值字段? – Davor

+0

剛剛編輯了搜索id =「emailaddress」值的答案。現在應該是好的。這種模式和preg_match的工作方式是,您看到的每個()模式都將是數組索引之一。在這種情況下,您總是會說$ matches [index] [3]是電子郵件地址。 – Rottingham

+0

是的,現在起作用了 - 唯一的改進是$匹配包含5行,其中只有一個是值本身,所以我需要循環遍歷它們,只選擇具有'@'的那一個沒有'''。是否有可能使它只有值匹配返回? – Davor

1

如果你想只得到價值試試這個:

$string = '<input type="text" autocomplete="" name="confirmedEmailAddress" id="emailaddress" maxlength="60" value="[email protected]" class="txt-box txtbox-m " aria-describedby="" aria-required="true" disabled="disabled" />'; 

$pattern = '/<input(?:.*?)id=\"emailaddress\"(?:.*)value=\"([^"]+).*>/i'; 

preg_match($pattern, $string, $matches); 
var_dump($matches[1]);