Что-то вроде этого:
$html = <<<HTML
<option value="TTO">1031</option><option value="187">187</option>
<option value="TWO">2SK8</option><option value="411">411</option>
<option value="AEL">Abec 11</option><option value="ABE">Abec11</option>
<option value="ACE">Ace</option><option value="ADD">Addikt</option>
<option value="AFF">Affiliate</option><option value="ALI">Alien Workshop</option>
<option value="ALG">Alligator</option><option value="ALM">Almost</option>
HTML;
$matches = array();
if (preg_match_all('#<option\s+value="([^"]+)">([^<]+)</option>#', $html, $matches)) {
$list = array();
$num_matches = count($matches[0]);
for ($i=0 ; $i<$num_matches ; $i++) {
$list[$matches[1][$i]] = $matches[2][$i];
}
var_dump($list);
}
Выход ($list
) будет:
array
'TTO' => string '1031' (length=4)
187 => string '187' (length=3)
'TWO' => string '2SK8' (length=4)
411 => string '411' (length=3)
'AEL' => string 'Abec 11' (length=7)
'ABE' => string 'Abec11' (length=6)
'ACE' => string 'Ace' (length=3)
'ADD' => string 'Addikt' (length=6)
'AFF' => string 'Affiliate' (length=9)
'ALI' => string 'Alien Workshop' (length=14)
'ALG' => string 'Alligator' (length=9)
'ALM' => string 'Almost' (length=6)
Несколько объяснений:
- Я использую
preg_match_all
, чтобы соответствовать столько раз, сколько возможно
([^"]+)
означает «все, что не является двойной кавычкой (как это было бы для обозначения конца value
), по крайней мере, один раз и столько раз, сколько возможно (+
)
([^<]+)
означает примерно то же самое, но с <
вместо "
в качестве маркера конца
preg_match_all
получит мне массив, содержащий в $matches[1]
список всех вещей, которые соответствуют первому набору ()
, и в $matches[2]
, что соответствует второму набору ()
- поэтому мне нужно перебрать результаты, чтобы пересоздать список, который вас интересует: -)
Надеюсь, это поможет - и что вы поняли, что он делает и как, чтобы вы могли помочь себе, в следующий раз ; -)
Как примечание: использование регулярных выражений для «разбора» HTML, как правило, не очень хорошая идея ... Если у вас есть полная HTML-страница, вы можете взглянуть на DOMDocument::loadHTML
.
Если вы этого не сделаете, а формат опций не определен четко ... Ну, может быть, это может оказаться полезным добавить некоторые вещи в регулярное выражение, в качестве меры предосторожности ... (Например, принимать пробелы здесь и там, принимая другие атрибуты, ...)