只是想知道你是否可以帮我解决一些我想在php中完成的小任务。
我的文件在文件中看起来像这样:
(random html)
...
<OPTION VALUE="195" SELECTED>Physical Chem
<OPTION VALUE="239">Physical Chem Lab II
<OPTION VALUE="555">Physical Chem for Engineers
...
(random html)
我想返回选项值的#值,忽略其他所有内容。 例如,在上面的例子中,我想要195,239&amp; 555返回,没有其他类似“选项值=”。
我在PHP中遇到这个问题。到目前为止,我有这个:
preg_match("/OPTION VALUE=\"([0-9]*)/", $data, $matches);
print_r($matches);
使用此值的返回值:
数组([0] =&gt; OPTION VALUE =“195 [1] =&gt; 195)数组([0] =&gt; OPTION VALUE =”195 [1] =&gt; 195)
我怎样才能归还所有的#?
我是模式匹配的新手,我读过的教程没什么用,所以非常感谢!
答案 0 :(得分:3)
preg_match将返回仅包含第一个匹配项的数组。数组的第一个索引将返回完整正则表达式的匹配,第二个索引匹配括号中的捕获组,请尝试以下方法获取其工作原理的概念:
preg_match("/(OPTION) VALUE=\"([0-9]*)/", $data, $matches);
print_r($matches);
您将看到它输出以下内容:
Array
(
[0] => OPTION VALUE="195
[1] => OPTION
[2] => 195
)
Array [0]包含完全匹配的数据,array [1]包含来自第一个捕获组(OPTION)的数据,array [2]包含来自第二个捕获组的数据([0-9] *)。 / p>
为了匹配多个匹配项,您需要使用preg_match_all函数。如果我们将其应用于原始代码,请执行以下操作:
preg_match_all("/OPTION VALUE=\"([0-9]*)/", $data, $matches);
print_r($matches);
我们得到:
Array
(
[0] => Array
(
[0] => OPTION VALUE="195
[1] => OPTION VALUE="239
[2] => OPTION VALUE="555
)
[1] => Array
(
[0] => 195
[1] => 239
[2] => 555
)
)
我希望这能让事情变得清晰!
答案 1 :(得分:2)
我认为你做得对。 PHP返回[0]中的完整匹配,然后返回捕获的组(父对象)作为其他组。
检查一下: http://xrg.es/#15m7krv
答案 2 :(得分:1)
试试这个:
preg_match_all('/OPTION VALUE=\"([0-9])+\"/', $data, $matches);
修改强>
误解了你的问题。已更改为preg_match_all()
答案 3 :(得分:1)
尝试使用preg_match_all()