使用preg_replace整合重复项,请考虑破折号

时间:2011-07-22 20:22:35

标签: php regex preg-replace

我有一个preg_replace,可以找到重复的条目并进行合并。我也需要考虑破折号,但目前它没有。

$id = KRS-KRS-123
preg_replace('/^(\w+)-(?=\1)/', '', $id);
// returns KRS-123

$id = KRS-KRS123
preg_replace('/^(\w+)-(?=\1)/', '', $id)
// returns KRS123
// I need this one to return KRS-KRS123

1 个答案:

答案 0 :(得分:4)

在前瞻\b内的\1之后添加字边界(?=\1\b)

preg_replace('/^(\w+)-(?=\1\b)/', '', $id);

这样,如果\1后跟\W(一个[^\w])或字符串结尾,前瞻只会评估为真。

演示

#!/usr/bin/env php
<?php
$s = 'KRS-KRS-123
KRS-KRS123';
echo preg_replace('/^(\w+)-(?=\1\b)/m', '', $s);
?>

将产生:

KRS-123
KRS-KRS123