它可能很容易,但我不能这样做..
给出一个字符串:
$str="i have an apple[1], and another one [2], and another[3]";
我想将[1]
,[2]
..替换为<tag id=1> <tag id=2>
我试过$str2 = preg_replace('/[([1-9][0-9]*)]/', '<tag id=1>', $str);
但无法插入变量
$str2 = preg_replace('/[([1-9][0-9]*)]/', '<tag id=$var>', $str);
我正在使用的正则表达式也是一个问题,它适用于某些情况但不适用于某些情况:(
任何帮助都深受赞赏..
编辑:
正如@ m42和@scibuff指出的那样,有效的正则表达式是:/\[([1-9][0-9]*)\]/
但是如何为每次替换增加?
编辑2: 我误解了M42的回答,谢谢。
但是如果我有另一个字符串呢?
str2="i have an egg [4], and another egg [5]";
如何继续第一个preg_replace
开始的增量?
我的意思是,期望的结果是:
i have an apple <tag id=1>,... i have an egg [4]..
编辑3:由M42解决
- 事实上,问题的第二部分毫无意义,preg_replace
会不断增加......谢谢所有人!
答案 0 :(得分:2)
怎么样:
$str2 = preg_replace('/\[([1-9][0-9]*)\]/', "<tag id=$1>", $str);
这是一个测试:
$arr = array(
"I have an apple[1], and another one [2], and another[3]",
"i have an egg [4], and another egg [5]",
);
foreach ($arr as $str) {
echo "before: $str\n";
$str = preg_replace('/\[([1-9]\d*)\]/', "<tag id=$1>", $str);
echo "after : $str\n";
}
<强>输出:强>
before: I have an apple[1], and another one [2], and another[3]
after : I have an apple<tag id=1>, and another one <tag id=2>, and another<tag id=3>
before: i have an egg [4], and another egg [5]
after : i have an egg <tag id=4>, and another egg <tag id=5>
答案 1 :(得分:0)
$str="i have an apple[1], and another one [2], and another[3]";
preg_match_All("/\[[0-9]+\]/",$str,$matches);
$replace=array();
for($j=0;$j<count($matches[0]);$j++)
{
$replace[]=htmlspecialchars("<tag id=$j>");
}
for($i=0;$i<count($matches[0]);$i++)
{
for($j=0;$j<count($matches[0]);$j++)
{
if($i==$j)
{
$str=(str_replace($matches[0][$i],$replace[$j],$str));
}
}
}
echo $str;