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

发布于 2024-11-26 03:04:46 字数 279 浏览 0 评论 0原文

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

I have a preg_replace that finds duplicate entries and consolidates. I need to take into consideration the dash as well, but currently it does not.

$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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

国粹 2024-12-03 03:04:46

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

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

这样,仅当 \1 后跟 \W[^\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

Add a word boundary, \b, after the \1 inside the look ahead (?=\1\b):

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

That way, the lookahead will only evaluate to true if \1 is followed by a \W (a [^\w]) or the end-of-string.

Demo

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

will produce:

KRS-123
KRS-KRS123
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文