2013-03-16 172 views
0
<select name="states"> 
    <option value="">-- Select State/Province --</option> 
    <option value="1">Alabama</option><option value="2">Alaska</option> 
    <option value="4">Arizona</option><option value="3">Arkansas</option> 
    <option value="5">California</option><option value="6">Colorado</option> 
    <option value="7">Connecticut</option> 
    <option value="8">Delaware</option> 
    <option value="9">District Of Columbia</option> 
    <option value="10">Florida</option> 
    <option value="11">Georgia</option><option value="12">Hawaii</option> 
    <option value="13">Idaho</option> 
    <option value="14">Illinois</option><option value="16">Indiana</option> 
    <option value="15">Iowa</option> 
    <option value="17">Kansas</option><option value="18">Kentucky</option> 
    <option value="19">Louisiana</option> 
    <option value="20">Maine</option> 
    <option value="21">Maryland</option> 
    <option value="23">Massachusetts</option> 
    <option value="22">Michigan</option><option value="25">Minnesota</option> 
    <option value="24">Mississippi</option> 
    <option value="26">Missouri</option><option value="27">Montana</option> 
    <option value="28">Nebraska</option><option value="39">Nevada</option> 
    <option value="29">New Hampshire</option> 
    <option value="30">New Jersey</option><option value="31">New Mexico</option> 
    <option value="32">New York</option> 
    <option value="33">North Carolina</option> 
    <option value="34">North Dakota</option> 
    <option value="35">Ohio</option><option value="36">Oklahoma</option> 
    <option value="37">Oregon</option> 
    <option value="38">Pennsylvania</option> 
    <option value="40">Rhode Island</option> 
    <option value="41">South Carolina</option> 
    <option value="42">South Dakota</option> 
    <option value="43">Tennessee</option> 
    <option value="44">Texas</option> 
    <option value="45">Utah</option> 
    <option value="46">Vermont</option> 
    <option value="47">Virginia</option> 
    <option value="48">Washington</option> 
    <option value="49">West Virginia</option> 
    <option value="50">Wisconsin</option><option value="51">Wyoming</option> 
</select> 

我們如何提取選項標籤> <內的每個字符串?PHP正則表達式子字符串

+0

強制性閱讀:http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html – Oswald 2013-03-16 10:26:16

回答

1

試試這個

preg_match_all('/(?<=<)[^>]+(?=>)/m', $subject, $result, PREG_PATTERN_ORDER); 
for ($i = 0; $i < count($result[0]); $i++) { 
    # Matched text = $result[0][$i]; 
} 

解釋

" 
(?<= # Assert that the regex below can be matched, with the match ending at this position (positive lookbehind) 
    <  # Match the character 「<」 literally 
) 
[^>] # Match any character that is NOT a 「>」 
    +  # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
(?=  # Assert that the regex below can be matched, starting at this position (positive lookahead) 
    >  # Match the character 「>」 literally 
) 
" 

編輯

也許你可以去DOM,而不是正則表達式

<?php 
$xml = <<< XML 
<?xml version="1.0" encoding="utf-8"?> 
<select name="states"> 
    <option value="">-- Select State/Province --</option> 
    <option value="1">Alabama</option> 
    <option value="2">Alaska</option> 
    <option value="4">Arizona</option> 
    <option value="3">Arkansas</option> 
    <option value="5">California</option> 
    <option value="6">Colorado</option> 
    <option value="7">Connecticut</option> 
    <option value="8">Delaware</option> 
    <option value="9">District Of Columbia</option> 
    <option value="10">Florida</option> 
    <option value="11">Georgia</option> 
    <option value="12">Hawaii</option> 
    <option value="13">Idaho</option> 
    <option value="14">Illinois</option> 
    <option value="16">Indiana</option> 
    <option value="15">Iowa</option> 
    <option value="17">Kansas</option> 
    <option value="18">Kentucky</option> 
    <option value="19">Louisiana</option> 
    <option value="20">Maine</option> 
    <option value="21">Maryland</option> 
    <option value="23">Massachusetts</option> 
    <option value="22">Michigan</option> 
    <option value="25">Minnesota</option> 
    <option value="24">Mississippi</option> 
    <option value="26">Missouri</option> 
    <option value="27">Montana</option> 
    <option value="28">Nebraska</option> 
    <option value="39">Nevada</option> 
    <option value="29">New Hampshire</option> 
    <option value="30">New Jersey</option> 
    <option value="31">New Mexico</option> 
    <option value="32">New York</option> 
    <option value="33">North Carolina</option> 
    <option value="34">North Dakota</option> 
    <option value="35">Ohio</option> 
    <option value="36">Oklahoma</option> 
    <option value="37">Oregon</option> 
    <option value="38">Pennsylvania</option> 
    <option value="40">Rhode Island</option> 
    <option value="41">South Carolina</option> 
    <option value="42">South Dakota</option> 
    <option value="43">Tennessee</option> 
    <option value="44">Texas</option> 
    <option value="45">Utah</option> 
    <option value="46">Vermont</option> 
    <option value="47">Virginia</option> 
    <option value="48">Washington</option> 
    <option value="49">West Virginia</option> 
    <option value="50">Wisconsin</option> 
    <option value="51">Wyoming</option> 
</select> 
XML; 

$dom = new DOMDocument; 
$dom->loadXML($xml); 
$options = $dom->getElementsByTagName('option'); 
foreach ($options as $option) { 
    echo $option->nodeValue, PHP_EOL; 
} 
?> 

訪問here更多這方面的細節。希望這可以幫助。

在HTML扔正則表達式之前
+0

我只想獲取包含字符串之間>和<所以結果應該是陣列[0] =空白,數組[1] = - 選擇州/省 - ,數組[2] =阿拉巴馬等.... – neeraj 2013-03-16 10:28:25

+0

如果正則表達式只返回選項之間的字符串那麼它會很好 – neeraj 2013-03-16 10:29:26

+0

對不起,我已經更新了我的問題。 – neeraj 2013-03-16 10:31:23

相關問題