我的文字(...
是其实际部分):
(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
if( $arr[$i-1] == $arr[$i] )
:这会检查上一行。但也请检查$arr[$i-2]
,$arr[$i-3]
等。答案 0 :(得分:1)
在你的正则表达式中,你不需要在开始时使用任何CRLF。
preg_replace('/^\(\d+\) /m', '(??) ', $t);
您可以在循环之前对数组进行排序,以便检查彼此之外的项目就足够了。
sort($arr);