我有以下表格的文字:
<p> </p>
<p>Email: [client_Email]</p>
<p>Password: [client_password]</p>
<p> </p>
<p>[client_footer]</p>
我希望捕获所有不包含
的段落或括号内的某些文字。所以在之前的文章中我想捕获:
<p>Email: [client_Email]</p> and <p>Password: [client_password]</p>
到目前为止,我有相反的模式:
/<p>(\[.*\]| )/
捕获我不想要的所有段落......
以下是代码:
$phrase = "<p> </p>
<p>Email: [client_Email]</p>
<p>Password: [client_password]</p>
<p> </p>
<p>[client_footer]</p>";
preg_match_all('/<p>(\[.*\]| )/', $phrase, $matches);
print_r($matches);
结果:
Array
(
[0] => Array
(
[0] => <p>
[1] => <p>
[2] => [client_footer]
)
[1] => Array
(
[0] => <p>
[1] => <p>
[2] => [client_footer]
)
)
答案 0 :(得分:3)
正则表达式不是正确的工具。但如果你真的想要,这是一条路:
$phrase = "<p> </p>
<p>Email: [client_Email]</p>
<p>Password: [client_password]</p>
<p> </p>
<p>[client_footer]</p>";
preg_match_all('/<p>(?! )(?!\[)(.+)/', $phrase, $matches);
print_r($matches);
<强>输出:强>
Array
(
[0] => Array
(
[0] => <p>Email: [client_Email]</p>
[1] => <p>Password: [client_password]</p>
)
[1] => Array
(
[0] => Email: [client_Email]</p>
[1] => Password: [client_password]</p>
)
)
答案 1 :(得分:0)
你可以试试下面的正则表达式,
<p>(?!(?: |\[[^\]]*\])<\/p>).*?<\/p>
$phrase = "<p> </p>
<p>Email: [client_Email]</p>
<p>Password: [client_password]</p>
<p> </p>
<p>[client_footer]</p>";
preg_match_all('~<p>(?!(?: |\[[^\]]*\])<\/p>).*?<\/p>~', $phrase, $matches);
print_r($matches);
<强>输出:强>
Array
(
[0] => Array
(
[0] => <p>Email: [client_Email]</p>
[1] => <p>Password: [client_password]</p>
)
)
答案 2 :(得分:0)
我会这样做,但只有这是你想做的所有事情,并期待阅读HTML:
<p>(?:(?!\[)[^&]+?|[^&]+?(?<!\]))</p>
如果您打算将其扩展为阅读更多HTML,请考虑使用解析器。