我正在制作一个图像板,无法弄清楚链接引用

时间:2016-05-26 15:25:10

标签: javascript php regex

我想做的事情相当简单,但我无法理解。 我希望扫描一大堆文本,查找>>1234的任何内容并替换为<a href="1234">>>1234</a> 虽然我可以做部分,但我无法想到这样做的方法。编写正则表达式很容易找到>>1234的实例,但它对其余部分无法帮助我。这实际上可以通过两种方式完成,客户端按原样提供文本,然后使用javascript格式化,或者服务器每次处理文本并吐出格式化版本。

这是github页面:https://github.com/4tran/VIB

这是我尝试过的一种正则表达式的例子:

<?php
function formatLink($post) {
    if(preg_match('/^\>\>([0-9]+)$/', $post)) {
      echo $post;
    }
}
formatLink(">>10"); // returns ">>10"
formatLink("spaghetti"); // returns ""
formatLink(">>10 spaghetti"); // returns ""
?>

任何帮助都会非常感激,我真的被困在这里。

编辑:我想出了一些东西。 好的,对于任何想要帮助的人,我现在对我想做的事情有一个非常好的参考。我在第一部分之前找到了第二部分,第二部分是文本引用。这是代码:

$re = "/^^(>[a-zA-Z0-9_ ]*$)/mi";
$subst = "<p class=\"quote\">$1</p>";
foreach ($boards as $x) {
  $x = $db->real_escape_string($x);
  $db->real_query("SELECT * FROM posts_".$x." ORDER BY timestamp DESC LIMIT 1");
  $res = $db->use_result();
  while ($row = $res->fetch_assoc()) {
    $str = str_replace("\r\n", "\n", $row['content']);
    $str = str_replace("\r", "\n", $str);
    $content = preg_replace($re, $subst, $str);
    echo "<p style=\"font-size:110%;\">/$x/ - </p>" . "<p>" . nl2br($content) . "<a href=\"" . "$x/" . $row['op'] . "\"> [reply]</a></p><br/>";
  }
}

最终编辑:我现在也得到了第一部分。

https://regex101.com/r/kC1bM7/3

1 个答案:

答案 0 :(得分:0)

没有结束锚$,剩下的文本打破了。量词将找到所有附加数字。 (如果在字符串中的任何位置允许^,你也可以取消前导锚>>number,在两个例子中它都是领先的所以我认为这是不变的?)。

尝试:

^(>>\d+)

演示:https://regex101.com/r/kC1bM7/2

如果您在HTML >中使用&gt;,则还应将preg_replace('/^>>(\d+)/', '&gt;&gt;$1', $string); 编码为其实体。

PHP用法我会使用类似的东西:

public PdfResult GetPdf(int databaseRecordId)
{
    var dbRecord = your code to return the sql record.

    return PdfResult(dbRecord.PdfBytes, "whatever name you want to show");

}

public class PdfResult : FileResult
{
    private const String DefaultFileName = "file.pdf";
    private readonly Byte[] _byteArray;

    public PdfResult(Byte[] byteArray, String fileName = DefaultFileName)
        : base(MediaTypeNames.Application.Pdf)
    {
        _byteArray = byteArray;
        FileDownloadName = fileName;
    }
    protected override void WriteFile(HttpResponseBase response) { response.BinaryWrite(_byteArray); }
}

也不是大于符号在正则表达式中没有特殊含义所以它不需要被转义。