1

我的文字(...是它的实际部分):

(01) Text here
(02) sometimes also (with brackets)
(03) foo
(05) and [other stuff!?]
...
(07) foo
(08) bar
(09) bar

查找重复的行(XX) foo(XX) bar打印它们。

//workaround
$tNormalized = preg_replace('/(*ANYCRLF)^\(\d+\) /m', '(??) ', $t);

$arr = explode("\n", $tNormalized);
if ( count($arr) > 1 )  {
    for ($i=1; $i<count($arr); $i++) {
        if( $arr[$i-1] == $arr[$i] ) {
            echo "Match:<br>";
            echo $arr[$i-1];
            echo $arr[$i];
        }
  }
}

期望的结果:

Match:
(03) foo
(07) foo

Match:
(08) bar
(09) bar
  • 问题 1:匹配重复行,同时忽略行首括号中的数字。我想打印括号中的数字。将它们规范化为“(??)”只是一种解决方法。
  • 问题 2 : if( $arr[$i-1] == $arr[$i] ): 这会检查上一行。但也要检查$arr[$i-2]$arr[$i-3]

测试:http ://codepad.viper-7.com/4IQV8x

4

1 回答 1

1

在您的正则表达式中,您一开始不需要任何 CRLF。

preg_replace('/^\(\d+\) /m', '(??) ', $t);

您可以在循环之前对数组进行排序,以便检查彼此相邻的项目就足够了。

sort($arr);

于 2013-01-05T14:11:11.797 回答