php - 使用 preg_match 捕获标签之间的文本,但 PHP 存在异常

标签 php html preg-match preg-match-all

来自file_get_contents我得到了一个 url 的 HTML 代码。

$html = file_get_contents($url);

现在我想捕获 <span class="place ville">Ville : <span> 之间的城市名称和</span> .

HTML 代码是:

<span class="place ville">Ville : <span>City name</span></span>

所以我正在使用这个:

preg_match('/<span class=\"place ville\">Ville : <span>(.+?)<\/span>/is', $html, $city);
$arr['city'] = $city[1];

它有效。

<小时/>

但有时,代码如下并带有链接:

<span class="place ville">Ville : <span><a href="https://example.com">City name</a></span></span>

在这种情况下,上面的代码不起作用。

你知道为什么吗?

谢谢。

最佳答案

这有点复杂,我们只需定义两个表达式并使用逻辑 OR | 将它们连接起来:

<span class="place ville">Ville : <span><.+?>(.+?)<\/

<span class="place ville">Ville : <span>([^<]+)?<

正则表达式

<span class="place ville">Ville : <span><.+?>(.+?)<\/|<span class="place ville">Ville : <span>([^<]+)?<

Demo

测试

$re = '/<span class="place ville">Ville : <span><.+?>(.+?)<\/|<span class="place ville">Ville : <span>([^<]+)?</m';
$str = '<span class="place ville">Ville : <span>City name</span></span>
    <span class="place ville">Ville : <span><a href="https://example.com">City name</a></span></span>
    <span class="place ville">Ville : <span>Århus</span></span>
    <span class="place ville">Ville : <span><a href="https://example.com">City name</a></span></span>
    ';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

foreach ($matches as $key => $city) {
    if ($city[1] == "") {
        echo $city[2] . "\n";
    } else {
        echo $city[1] . "\n";
    }
}

输出

City name
City name
Århus
City name

关于php - 使用 preg_match 捕获标签之间的文本,但 PHP 存在异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56614891/

相关文章:

php - php 如何下载不存在的文件

php - 处理完成后删除 URL 中的 GET 参数(不使用 POST),PHP

php搜索接受不完整的输入

php - 如何使用 PHP 获取服务器的外部 IP?

php - 使用 Selenium Facebook PHP Webdriver 在 chrome 中打开新标签

php - mysqli 连接错误后无法重定向

php - 单击链接提交表单并发送到多个电子邮件 ID

javascript - 使用open.window()在新窗口中打开js程序

javascript - 正则表达式提取模式之间的文本

regex - 正面和负面前瞻和量词