【问题标题】:How do I use preg_match_all with 2 values and preg_replace to create 2 different links如何使用具有 2 个值的 preg_match_all 和 preg_replace 创建 2 个不同的链接
【发布时间】:2010-12-23 20:58:48
【问题描述】:

我有一个在表格中显示的文本文件。我正在使用 preg_match_all 来查找具有特定章节的特定标题,并且我正在用 preg_replace 替换标题和章节以使其成为链接..

例如文本文件中的内容如下:

Dec 04 20:15 Naruto 123
Dec 04 17:42 Naruto 98
Dec 04 16:19 D Gray Man 001
Dec 04 16:05 Bleach 128
Dec 04 12:13 50 x 50 44

我将标题和章节...(即火影忍者 123)替换为指向该网页所在网页的链接。

我还需要使网页所在的文件夹路径生效。

  • 文件夹路径是动画的标题。因此,如果我们为 Naruto 123 执行此操作,则文件夹路径为 Naruto/。

所以最后链接会是这样的:

http://website/folderpath/animetitle animechapter

我遇到的问题是我可以获得正确的文件夹路径,但我无法创建 2 个或更多不同的链接。我的代码用相同的链接替换了火影忍者 123 和火影忍者 98。

这是我的代码:

  <?

  $data=file_get_contents('series-updates.txt'); //get data from file

$regexp[0]="/(Naruto)[[:space:]](\w+)/";

$regexp[1]="/Naruto/";

preg_match($regexp[0], $data, $matches); //match Manga Title with Chapter for URL

$url= $matches[0];

preg_match($regexp[1], $data, $matches2); //match Manga Title for folderpath

$folderpath= $matches2[0];

$patterns= '/(Naruto)[[:space:]](\w+)/';

$replacements= '<a href="'.$folderpath.'/'.$url.'">'.$url.'</a>';

$data=preg_replace($patterns,$replacements, $data);

  $dat=explode("\n",$data); //split data at new lines

  echo '<table cellspacing=0>';

  foreach ($dat AS $value) { //loop

echo '<tr><td>'.$value.'</td></tr>';

  }

  echo '</table>';

  ?>

这是代码的输出:

http://xennetworks.com/output3.php

** 另外,我在 php 代码中使用 preg_match 而不是 preg_match_all 的原因是因为如果我将 preg_match_all 用于链接,我会得到 ARRAY 的输出,我希望你看到我想要的结果。

【问题讨论】:

  • 您是否希望脚本仅限于一个特定的标题(在您的示例中为火影忍者)并忽略所有其他行?如果不是,最后三行的预期结果是什么(没有章节号)?
  • 最后它不应该被限制在一个标题上。最后三行将有章节编号,我只是忘记添加它们。我会这样做。谢谢!

标签: php preg-replace hyperlink preg-match-all


【解决方案1】:
<?php
$filedata = "Dec 04 20:15 Naruto 123
Dec 04 17:42 Naruto 98
Dec 04 16:19 D Gray Man 001
Dec 04 16:05 Bleach 128
Dec 04 12:13 50 x 50 44";

$lines = explode("\n", $filedata);

echo "<table border=\"1\">";

foreach($lines as $line)
{
echo "<tr>";
preg_match("/^([a-zA-Z]{3}\s\d{2}\s\d{2}:\d{2})\s(.+?)\s(\d+)\s*?$/", $line, $matches);
echo "<td>$matches[1]</td>";
echo "<td><a href=\"/$matches[2]/$matches[2] $matches[3]\">$matches[2] $matches[3]</a></td>";
echo "</tr>";
}
echo "</table>"
?>

【讨论】:

    【解决方案2】:

    尽管我不确定您要查找的链接 URL 是什么,但请尝试此尺寸:

    $s= <<<STR
    Dec 04 20:15 Naruto 123
    Dec 04 17:42 Naruto 98
    Dec 04 16:19 D Gray Man 001
    Dec 04 16:05 Bleach 128
    Dec 04 12:13 50 x 50 44
    STR;
    
    preg_match_all('/\w{3}\s\d{2}\s\d{2}:\d{2}\s(.+)?\s(\d{2,})/', $s, $m);
    
    for ($i=0; $i<count($m[1]); $i++) {
     $url= sprintf('http://xennetworks.com/%s %s', $m[1][$i], $m[2][$i]);
     echo("$url\n");
    }
    

    【讨论】:

    猜你喜欢
    • 2018-11-18
    • 2017-04-04
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2016-04-03
    • 1970-01-01
    相关资源
    最近更新 更多