PHP - 字符串 - 查找输入名称=的所有值;

时间:2014-03-19 10:58:40

标签: php regex

我试图从输入name =“something”的大字符串输出中获取所有值;

我的curl函数以String格式返回响应(事实上它是一个完整的html页面)。大多数信息都没用,但是在这个字符串中我有我想要的信息

<input name="queueID" value="4795" type="checkBox" checked>aaaa
<br>

<input name="queueID" value="4799" type="checkBox" checked>bbbb
<br>

<input name="queueID" value="4796" type="checkBox" checked>cccc
<br>

<input name="queueID" value="4794" type="checkBox" checked>dddd
<br>

注意:queueID的数量是动态的,所以我可以有2个队列或10个队列。并且每个队列上的数字可以不同,按顺序不是必需的。输入名称是ALWAYS queueID。

使用REGEX执行此操作时,我真的不知道该怎么做,如果有人知道我会欣赏正则表达式解决方案的答案。

我尝试过更多静态的方式,比如

    $needle = array (' ' ' ' ' ' ' ' );
    $pattern  = '' . implode('|', array_map('preg_quote', $needle)) . '/i';

    foreach($file_list as $file) {
        if(preg_match($pattern, $file)) {

        }
    }

然而,只有当我知道我有多少队列以及这个队列的数字时,这才有效。任何人都能为这个问题提出一个合适的解决方案吗

3 个答案:

答案 0 :(得分:1)

preg_match_all('/(?<=^<input name="queueID" value=")\d+/mi', $str, $values);

答案 1 :(得分:1)

关于以下PCRE正则表达式的preg_match_all怎么样?

preg_match_all('#<input.*?>(.*?)\n<br>#', $html, $matches);

Here's what I get

答案 2 :(得分:1)

如果使用正则表达式,则name-value的排序发生变化时,您将面临问题。例如,这个与您的输入略有不同:

value="4794" name="queueID"

您可以尝试使用首先检查(?=[^>]*name="queueID")标记是否包含<input的前瞻性正则表达式name="queueID")。之后它会解析Value。

$input = '<input name="queueID" value="123" type="checkBox" checked>aaaa
<input name="queueID" value="456" type="checkBox" checked>bbbb
<input name="xqueueID" value="789" type="checkBox" checked>bbbb
<input name="queueID" value="101112" type="checkBox" checked>cccc
<input value="131415" name="queueID" type="checkBox" checked>dddd';

preg_match_all('/<input\b(?=[^>]*name="queueID")[^>]*\bvalue="([^"]+)"/i', $input, $match);
print_r($match[1]);

输出:

[0] => 123
[1] => 456
[2] => 101112
[3] => 131415