Php 在与regexp匹配的范围内替换

Php 在与regexp匹配的范围内替换,php,regex,Php,Regex,我正试着把我在Word online上做的引用放在一篇文章里。 我有纯文本,有这样的参考1,1,2,5,1-5或组合:1-5,8,10-15。我想让数字成为参考的超链接,并将整个部分放在和之间的另一个HTML标记中 我发现我可以用regexp来匹配括号和带有\[0-9,\-]*\,其中的数字带有[\,\-]?\d{2}\d[\,\-],但是如何进行替换以使我的输出是这样的呢? !1,2-5! 提前非常感谢 很抱歉我的描述含糊不清 我想做的是,在我的文章的末尾,把我文章中的每个参考号都链接到那个参

我正试着把我在Word online上做的引用放在一篇文章里。 我有纯文本,有这样的参考1,1,2,5,1-5或组合:1-5,8,10-15。我想让数字成为参考的超链接,并将整个部分放在和之间的另一个HTML标记中

我发现我可以用regexp来匹配括号和带有\[0-9,\-]*\,其中的数字带有[\,\-]?\d{2}\d[\,\-],但是如何进行替换以使我的输出是这样的呢? !1,2-5!


提前非常感谢

很抱歉我的描述含糊不清

我想做的是,在我的文章的末尾,把我文章中的每个参考号都链接到那个参考号上。引用的格式可以是1,1-5或1,3,5,或1-3,5,8-10的组合。 例如,我想要的输出是

我发现我不能在一次查找和替换中做到这一点,所以我不得不将其分解为两部分。 这就是我想到的:

<?php
$input = "Hello, I am a sample text(1). I have references in me(2-5). They can be in a weird, mixed format(1,3,5-8,10,13)";

function references($input) {
    preg_match_all("#\([0-9,\-]*\)#i", $input, $referenties);
    $tekst = preg_split("#\(([0-9,\-]*)\)#i", $input);
    $referenties = preg_replace("#([\d]+)#", "<a href=\"#ref-$1\">$1</a>", $referenties[0]);

    for($i=0; $i < count($tekst)-1 OR $i < count($referenties)-1; $i++) {
        $output.=$tekst[$i].$referenties[$i];
    }

    return $output;
}

echo references($input);
?>
它对我有用。
你有没有想过我怎样才能把它做得更好?

你有没有试过:$1,$2-$3! 作为替换参数,按照有关的详细信息,您可以将reges\d{2}|\d的这部分优化为此\d{,2}。加上你的预期输出是什么?你能展示一些样本输入和预期输出吗?