0

我只是不明白,似乎正则表达式讨厌我。

我需要从 HTML 代码中获得一个简单的模式

我需要标签之间的单词。

出于某种原因,在 javascript 在线正则表达式工具中,它可以工作:

$pattern = '/<image>(.*?)<\/image>/';

我正在搜索的一个例子是这里:

<p>Die exakten Maße für die Gruppenmontage mit Bobilink sehen sie hier:</p>\r\n</td>\r\n<td>\r\n<p><image>classic_b montage link.jpg</image></p>

但我只得到 Array() 的输出 我完整的 php 代码:

$zeilen = file('j25.sql'); 
$pattern = '/<image>(.*?)<\/image>/';
foreach ($zeilen as $zeile) {
    preg_match($pattern, $zeile, $matches);
}
echo '<h1>Matches</h1>';
print_r($matches); 

如果我没有准备好,请帮助我,这将毁掉整个周末。错误在哪里?

非常感谢

4

5 回答 5

1

如果您只想要标签之间的内容,则将其存储在 $matches[1] 中。在您的代码中,您分析的每一行都会删除 $matches。要获取结果数组,您应该使用其他变量:

$results = array();
foreach ($zeilen as $zeile) {
    if (preg_match($pattern, $zeile, $matches)) {
        $results[] = $matches[1];
    }
}
print_r($results); 

在你的表达中,你可以替换“*?” 通过“+”(表示一个或多个)

于 2013-02-22T13:14:21.930 回答
0

问题不在于正则表达式......这有效:

<?php 
$zeile = "<p>Die exakten Maße für die Gruppenmontage mit Bobilink sehen sie hier:</p>\r\n</td>\r\n<td>\r\n<p><image>classic_b montage link.jpg</image></p>";

// $zeilen = file('j25.sql'); 
$pattern = '/<image>(.*?)<\/image>/';
// foreach ($zeilen as $zeile) {
    preg_match($pattern, $zeile, $matches);
// }
echo '<h1>Matches</h1>';
print_r($matches); 

 ?>

要产生这个输出......

<h1>Matches</h1>Array
(
    [0] => <image>classic_b montage link.jpg</image>
    [1] => classic_b montage link.jpg
)
于 2013-02-22T13:01:49.470 回答
0

您在测试 php 文件中测试代码对我有用...

$testStr = '<p>Die exakten Maße für die Gruppenmontage mit Bobilink sehen sie hier:</p>\r\n</td>\r\n<td>\r\n<p><image>classic_b montage link.jpg</image></p>';
$pattern = '/<image>(.*?)<\/image>/';
preg_match($pattern, $testStr, $matches);
print_r($matches); 

//outputs:   Array ( [0] => classic_b montage link.jpg [1] => classic_b montage link.jpg )

您可以发布数据文件的内容吗?

于 2013-02-22T13:02:16.157 回答
0

您的错误是$matches仅在文件的最后一行包含匹​​配项,因为它的值在循环的每次迭代中都会重新定义。您可以将matches[1]每行中的捕获组匹配添加到另一个数组中,如 Romains 回答中一样,或者使用以下命令:

$zeilen = file_get_contents('j25.sql'); 
$pattern = '/<image>(.*?)<\/image>/';
preg_match_all($pattern, $zeilen, $matches);

echo '<h1>Matches</h1>';
print_r($matches[1]); 
于 2013-02-22T13:21:22.387 回答
0

确保文件具有正确的服务器权限,以便 PHP 可以读取内容。

于 2013-02-22T13:15:27.387 回答