我有一个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

最佳答案

在“向前看”中的“\b”后面添加一个单词边界“\1”:

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

这样,只有在(?=\1\b)后跟\1(a\W)或字符串结尾时,lookahead才会计算为true。
演示
#!/usr/bin/env php
<?php
$s = 'KRS-KRS-123
KRS-KRS123';
echo preg_replace('/^(\w+)-(?=\1\b)/m', '', $s);
?>

将产生:
KRS-123
KRS-KRS123

关于php - 使用preg_replace整合重复项,请考虑破折号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6795683/

10-10 15:17