搜索和替换数千行php

时间:2012-01-25 13:36:25

标签: php

我是使用preg_replace的新手,所以请耐心等待。

我有几百行包含这一行

<strong>[*<a title="*" name="*"></a>]</strong><br /> Lorem ipsum
上面代码上的

*表示该数字,例如1,2,3

我想要实现的是

*. Lorem Ipsum

Example, 1. Lorem ipsum, 2. Lorem ipsum

实现它的最佳方法是什么?感谢。

示例文本

<strong>[1<a title="1" name="1"></a>]</strong><br /> Lorem ipsum 12345<br /> <strong>[2<a title="2" name="2"></a>]</strong><br /> lorem ipsum asdasd<br /> <strong>[3<a title="3" name="3"></a>]</strong><br /> lorem ipsum asdsadasdasdasd<br />

它可以达到数百个

3 个答案:

答案 0 :(得分:3)

怎么样:

$output = preg_replace('~^<strong>\[(\d+)<.*?<br\s*/>~', '$1. ', $input);

<强>解释

~             : regex delimiter
  ^           : start of line
  <strong>    : <strong> as is
  \[          : an open square bracket
  (\d+)       : capture one or more digits
  <.*?        : > followed by any number of any char
  <br\s*/>    : <br/> or <br />
~

用第一个捕获的组(即数字)替换所有匹配,后跟一个点和一个空格。

根据评论进行编辑:

$input = '<strong>[1<a title="1" name="1"></a>]</strong><br /> Lorem ipsum 12345<br /> <strong>[2<a title="2" name="2"></a>]</strong><br /> lorem ipsum asdasd<br /> <strong>[3<a title="3" name="3"></a>]</strong><br /> lorem ipsum asdsadasdasdasd<br />';
$output = preg_replace('~\s*<strong>\[(\d+)<.*?<br\s*/>(.*?)(?:<br />|$)~', "$1. $2\n", $input);
echo $output,"\n";

<强>输出:

1.  Lorem ipsum 12345
2.  lorem ipsum asdasd
3.  lorem ipsum asdsadasdasdasd

答案 1 :(得分:1)

一种方法是使用preg_replace_callback()并创建一个函数来递增变量并用*替换该变量的当前值(尽管我认为你可能必须使用全局变量这通常被认为是不好的做法。)

除此之外,我认为你必须迭代地进行(即循环)。

答案 2 :(得分:1)

$x=1;
$result = preg_replace_callback (
'%<strong(.*?)strong><br.?/>.?(.*?)\r\n%sim'
, create_function(
          '$matches,$x',
          'return $x++.$matches[1];'
), $input );

像这样的东西