0

如何使用 PHP 函数 preg_match_all 匹配示例中 HTML 内容中的所有以下值并将其获取到数组中?

我需要这个数组:

属性[7]

属性[823]

多选属性[1663]

数字属性[1609]

像这样:

$shouldbe = array(attribute[7], attribute[823], multiSelectAttribute[1663], numericAttribute[1609]);

$html = '
<form>
    <input type="hidden" name="this_should_not_be_matched" value="" /> <span id=
    "syi-attribute-7" class="dropdown required" tabindex="0"><input type="hidden"
    name="attribute[7]" value="" /> <span class="label">Test...</span></span>
</form>

<ul class="item-frame">
    <li class="item" data-val="">Test...</li>

    <li class="item" data-val="30">New</li>

    <li class="item" data-val="31">Test2</li>

    <li class="item" data-val="32">Test2</li>
</ul><span id="syi-attribute-82" class="dropdown" tabindex="0"><input type="hidden"
name="attribute[823]" value="" /> <span class="label">Test...</span></span>

<ul class="item-frame">
    <li class="item" data-val="">Test...</li>

    <li class="item" data-val="393">New</li>

    <li class="item" data-val="394">New</li>

    <li class="item" data-val="395">Test2</li>
</ul>

<div class="ms-opt">
    <input id="syi-attribute-8878" type="checkbox" name="multiSelectAttribute[1663]"
    value="8878" /> <label for="syi-attribute-8878">Test2</label>
</div>

<div class="ms-opt">
    <input id="syi-attribute-8879" type="checkbox" name="multiSelectAttribute[1663]"
    value="8879" /> <label for="syi-attribute-8879">Test3</label>
</div>

<form>
    <input class="" type="text" name="numericAttribute[1609]" value="" min="0" max=
    "99" />
</form>';

我知道我可以使用 preg_match_all 。但在我看来,不可能使用多个“针”来搜索 $html 干草堆,所以我有点卡住了。

4

2 回答 2

1

试试这个代码。正则表达式将匹配任何带有括号的名称属性。

//The regular expression
$regExp = "/<input[^>]*name\s*=\s*[\"'](.*?\[.*?\])['\"]/i";

// The content
$html = 'your HTML';

// The data extraction
$matchesCount = preg_match_all($regExp, $html, $matches);

// All the matches are in $matches[1]
$finalResult = $matches[1];
var_dump($finalResult);

// As you have duplicates, you can also use:
$finalResult = array_unique($finalResult );
var_dump($finalResult);
于 2013-06-25T10:20:46.517 回答
0

您可以使用此正则表达式来匹配元素

(multiSelect|numeric)?[Aa]ttribute\[[0-9]+\]
于 2013-06-25T09:57:47.563 回答