巩固重复模式

kyl*_*lex 8 php regex

我正在开发一个脚本,用于开发某些字母数字字符串,用短划线分隔-.我需要测试字符串以查看是否有任何字符集(字符串之间的字符)是相同的.如果是,我需要巩固它们.在我的情况下,重复的字符总是出现在前面.

Examples:

KRS-KRS-454-L
would become:
KRS-454-L

DERP-DERP-545-P
would become:
DERP-545-P
Run Code Online (Sandbox Code Playgroud)

mhy*_*itz 10

<?php
$s = 'KRS-KRS-454-L';
echo preg_replace('/^(\w+)-(?=\1)/', '', $s);
?>
// KRS-454-L
Run Code Online (Sandbox Code Playgroud)

这使用正向前瞻 (?=...)来检查重复的字符串.

请注意,\w还包含下划线.如果您只想限制为字母数字字符,请使用[a-zA-Z0-9].

另外,^正如你所提到的那样,我已经坚持:"重复的字符总是出现在前面[...]"