我只是不明白,似乎正则表达式恨我。
我需要从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);
请帮助我,如果我没有准备就绪,这将毁了整个周末。错误在哪里?
非常感谢你
答案 0 :(得分:1)
如果您只想要标签之间的内容,它将存储在$ matches [1]中。 在您的代码中,$ matches会在您分析的每一行中被删除。要获得结果数组,您应该使用另一个变量:
$results = array();
foreach ($zeilen as $zeile) {
if (preg_match($pattern, $zeile, $matches)) {
$results[] = $matches[1];
}
}
print_r($results);
在你的表达中,你可以替换“*?”用“+”(意思是一个或多个)
答案 1 :(得分: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
)
答案 2 :(得分: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 )
您可以发布数据文件的内容吗?
答案 3 :(得分:0)
确保文件具有正确的服务器权限,以便PHP可以读取内容。
答案 4 :(得分: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]);