选择在字符串中仅出现一次的字符

时间:2018-08-01 10:39:34

标签: regex

是否可以选择只出现一次的字符?

我对否定后向现象很熟悉,并尝试了以下方法

/(.)(?<!\1.*)/

但是无法正常工作。

示例:

given AXXDBD it should output ADBD
       ^^ - this is unacceptable
given 123558 it should output 1238
         ^^ - this is unacceptable

提前感谢您的帮助

2 个答案:

答案 0 :(得分:5)

可能有很多方法,但是我认为您正在寻找类似的东西

(.)\1{1,}

也就是说,任何字符后跟相同字符至少一次。

您的问题同时带有PHP和JS标记,因此:

PHP:

$str = preg_replace('/(.)\1{1,}/', '', $str);

JS:

str = str.replace(/(.)\1{1,}/g, '');

答案 1 :(得分:4)

不使用正则表达式:

function not_twice ($str) {
    $str = (string)$str;
    $new_str = '';
    $prev = false;

    for ($i=0; $i < strlen($str); $i++) {
        if ($str[$i] !== $prev) {
            $new_str .= $str[$i];
        }
        $prev = $str[$i];
    }
    return $new_str;
}

删除连续的字符(1+),并在需要的情况下将数字转换为字符串。


测试:

$string = [
    'AXXDBD',
    '123558',
    12333
];
$string = array_map('not_twice', $string);
echo '<pre>' . print_r($string, true) . '</pre>';

输出:

Array
(
    [0] => AXDBD
    [1] => 12358
    [2] => 123
)