【问题标题】:Select characters that appear only once in a string选择字符串中只出现一次的字符
【发布时间】:2018-08-01 10:39:33
【问题描述】:

是否可以选择只出现一次的角色?

我熟悉负后视,并尝试了以下

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

但无法让它工作。

例子:

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

提前感谢您的帮助

【问题讨论】:

标签: regex


【解决方案1】:

可能有很多方法可以解决这个问题,但我认为您正在寻找类似的方法

(.)\1{1,}

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

您的问题同时被标记为 PHP 和 JS,所以:

PHP:

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

JS:

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

【讨论】:

  • 你可以用+代替{1,}
【解决方案2】:

不使用正则表达式:

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
)

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多