【发布时间】:2021-10-14 16:47:44
【问题描述】:
请帮助我了解 preg_match_all 的以下模式
如何更改我的模式以获得所需的输出?
在字符串中搜索类名如“email_”的标签(email_ OR email_p_12 OR email_22 OR email_xx)
获取标签<span class=" xx email_xx xx "> THE EMAIL ADDRESS </span>之间的文本
获取以“email_”开头的类名
这是我的模式:$pattern = '~<span class=\"((.*?)*)*(email_(.*?))?(.*?)\">(.*?)</span>~';
我需要一个这样的数组:
Array
(
[0] => Array
(
[mail] => labore@et.de
[class] => email_p_14
)
[1] => Array
(
[mail] => esse@cillum.de
[class] => email_p_22
)
[2] => Array
(
[mail] => anim@id.de
[class] => email_
)
[3] => Array
(
[mail] => laboris@nisi.de
[class] => email_
)
)
文件:
<?php
$string = '
<p>
Lorem ipsum dolor sit amet,
consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut
<span class=" red email_p_14">labore@et.de</span>
dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea consequat.
Duis aute irure in reprehenderit in voluptate velit
<span class="email_p_22">esse@cillum.de</span>
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit
<span class="blue email_ green">anim@id.de</span>
laborum. Donec elementum ligula.
Quis nostrud exercitation ullamco
<span class="blue email_ green black">laboris@nisi.de</span>
aliquip ex ea consequat.
</p>';
/* Looking for these:
<span class=" red email_p_14">labore@et.de</span>
<span class="email_p_22">esse@cillum.de</span>
<span class="blue email_ green">anim@id.de</span>
<span class="blue email_ green black">laboris@nisi.de</span>
*/
$pattern = '~<span class=\"((.*?)*)*(email_(.*?))?(.*?)\">(.*?)</span>~';
preg_match_all($pattern, $string, $m);
$clean_array = array_filter(array_map('array_filter', $m));
ksort($clean_array);
$output = Array();
foreach($clean_array as $row) {
foreach($row as $key => $val){
$output[$key][]=$val;
}
}
print("<pre>".print_r($output,true)."</pre>");
这是我得到的:
Array
(
[0] => Array
(
[0] => labore@et.de
[1] => red email_p_14
[2] => labore@et.de
)
[1] => Array
(
[0] => esse@cillum.de
[1] => email_
[2] => p_22
[3] => esse@cillum.de
)
[2] => Array
(
[0] => anim@id.de
[1] => blue email_ green
[2] => anim@id.de
)
[3] => Array
(
[0] => laboris@nisi.de
[1] => blue email_ green black
[2] => laboris@nisi.de
)
)
我需要一个这样的数组:
Array
(
[0] => Array
(
[mail] => labore@et.de
[class] => email_p_14
)
[1] => Array
(
[mail] => esse@cillum.de
[class] => email_p_22
)
[2] => Array
(
[mail] => anim@id.de
[class] => email_
)
[3] => Array
(
[mail] => laboris@nisi.de
[class] => email_
)
)
*/
【问题讨论】:
-
我们不使用正则表达式解析 html。
-
你知道你有投票的特权,对吧?如果您发现任何对您有帮助的正确答案,您可以通过为每个答案点赞来感谢他们。这也向未来的研究人员发出信号,表明您推荐答案中的建议。我不需要更多的积分,thefourthbird 也不需要,但你应该了解你拥有的工具。
标签: php arrays dom xpath html-parsing