我想匹配字符串中的所有重复字符。如果我有:
aecffead
除了c
和d
之外,正则表达式应匹配所有字符(因为这些字符只出现一次)。
现在我已经拥有了这个,它匹配稍后将出现在字符串
中的所有字符/([a-z])(?=.*\1)/g
它匹配这些粗体字符: 的 AE C ˚F FEAD
但它应符合这些大胆的字符: ae c ffea d
我的正则表达式与最后的" fea"不匹配,因为这些字符不会在字符串中稍后出现。但因为它们已经发生,我想也要匹配它们。
任何知道如何解决这个问题的人?我想过将积极的前瞻与积极的后视相结合,但我无法完成它。
修改
只是为了澄清:
我们的想法是删除多次出现的所有字符。所以不仅重复,但如果字符a
出现不止一次,我想从字符串中删除所有a
个字符。
答案 0 :(得分:2)
您可以将字符串转换为数组:
$string = "aecffead";
var_export(array_keys(array_intersect(array_count_values(str_split($string)),[1])));
输出:
array (
0 => 'c',
1 => 'd',
)
这将值计为数组,然后使用array_intersect()
仅保留出现一次的值,然后将键转换为零索引数组的值。
此外,您可以使用implode()
编辑:或者你可以尝试这个(使用正则表达式模式):
$string = "aecffead";
preg_match_all('/([a-z])(?=.*\1)/', $string, $matches);
echo str_replace($matches[0], "", $string); //Output: cd