PHP preg_match 从 html 代码中提取地址

PHP preg_match to extract addresses from html code

我正在尝试从 HTML 代码中提取地址和电话号码。

首先我从页面内容中获取容器member-address的内容。 preg_match('/id="member-addresses".*?<\/div>/is', $webpage, $contact_details);

这个returns这个

    id="member-addresses">
                <h2>Contact details</h2>
                    <h3 id="foobar">Work</h3>
                        <p>
                            123 Fake Street, Main Area, PG42 TGJ<br />

                            Tel: 020 9 555 42589<br />
</p>
</div>

现在我想获取工作地址。

preg_match('/Work</h3><p>.*?<br \/>/', $contact_details[0], $address_work);

这没有返回任何东西。有什么问题。

你那里有一些错误。

<?php
$a = '  id="member-addresses">
                <h2>Contact details</h2>
                    <h3 id="foobar">Work</h3>
                        <p>
                            123 Fake Street, Main Area, PG42 TGJ<br />

                            Tel: 020 9 555 42589<br />
</p>
</div>';
preg_match('~Work</h3>\s+<p>(.*?)<br />~is', $a, $address_work);
print_r($address_work);

第一个错误是您使用“/”作为正则表达式定界符,因此您需要在正则表达式中转义它的所有实例。我已经把它换成了波浪线,因为我发现它们没有用。在结束 h3p 之间的第二个问题你有白色 space (如果白色 space 是可选的,将 \s+ 更改为 \s* + 需要它)。第三个问题是您没有对搜索的内容进行分组。潜在的第四个问题是 PCRE 修饰符,波浪号后的 i 表示不区分大小写,您可能不希望这样。 s 表示 . 将匹配换行符以及任何字符。 http://php.net/manual/en/reference.pcre.pattern.modifiers.php