2017-02-06 21 views
0

У меня есть HTML строка, как ...Как анализировать все атрибуты тега из строки в массив, используя php?

<match id="18" srs="ICC Womens World Cup Qualifier, 2010" mchDesc="BANW vs PMGW" mnum="4th Match"> 

Использование PHP как я могу разделить/декодирования/разобрать эту строку в качестве доступного объекта (ключевой пары значений), таких как ....

array(
    "id"=>"18", 
    "srs"=>"ICC Womens World Cup Qualifier, 2010", 
    "mchDesc"=>"BANW vs PMGW", 
    "mnum"=>"4th Match" 
); 

Выход:

Array 
(
    [id] => 18 
    [srs] => ICC Womens World Cup Qualifier, 2010 
    [mchDesc] => BANW vs PMGW 
    [mnum] => 4th Match 
) 
+0

Возможный дубликат [PHP String Split] (http://stackoverflow.com/questions/2599230/php-string-split) – Vintesh

+1

Взгляните на это: http://php.net/manual/en/domdocument .loadhtml.php – steven

+0

Пожалуйста, ознакомьтесь с спецификацией обоих вопросов @Vintesh –

ответ

2

Это должно работать.

(\w+)\=\"([a-zA-Z0-9 ,.\/&%?=]+)\" 

код PHP:

<?php 
$re = '/(\w+)\=\"([a-zA-Z0-9 ,.\/&%?=]+)\"/m'; 
$str = '<match id="18" srs="ICC Womens World Cup Qualifier, 2010" mchDesc="BANW vs PMGW" mnum="4th Match"> 
'; 

preg_match_all($re, $str, $matches); 

$c = array_combine($matches[1], $matches[2]); 

print_r($c); 

Выход:

Array 
(
    [id] => 18 
    [srs] => ICC Womens World Cup Qualifier, 2017 
    [mchDesc] => BANW vs PMGW 
    [mnum] => 4th Match, Group B 
    [type] => ODI 
    [vcity] => Colombo 
    [vcountry] => Sri Lanka 
    [grnd] => Colombo Cricket Club Ground 
    [inngCnt] => 0 
    [datapath] => google.com/j2me/1.0/match/2017/ 
) 

Ideone: http://ideone.com/OQ7Ko1

Regex101: https://regex101.com/r/lyMmKF/7

+0

все нормально, но когда строка становится «", то datapath не может разобрать. –

+0

@masumbillah фиксированный.^_^и добавлена ​​поддержка «google.com/j2me/1.0/match/2017/index.php?=potato» и «google.com/j2me/1.0/match/2017/index.php?=potato&?watermelon= true " –

+0

Если шаблон начинается с' \ w + ', вам не нужно раньше устанавливать границу слова. Но если вы хотите уменьшить количество шагов, вы можете поместить их в начало шаблона (вне скобки). –

4

Использованиеи DOMAttr:

$str = '<match id="18" srs="ICC Womens World Cup Qualifier, 2010" mchDesc="BANW vs PMGW" mnum="4th Match">'; 
$dom = new DOMDocument; 
libxml_use_internal_errors(true); 
$dom->loadHTML($str); 

$result = []; 

foreach($dom->getElementsByTagName('match')->item(0)->attributes as $attr) { 
    $result[$attr->name] = $attr->value; 
} 

print_r($result); 

Основное преимущество заключается в том, что она не заботится, если значение атрибутов заключены между одинарными или двойными кавычками (или без кавычек на всех), если есть пробела до или после знака равенства.