gpt4 book ai didi

regex - 什么是用于查找字符串中第一个非连续重复字符的 Perl 正则表达式?

转载 作者:行者123 更新时间:2023-12-02 00:41:04 26 4
gpt4 key购买 nike

如果您选择接受它,您的任务是编写一个 Perl 正则表达式,对于给定的字符串,将返回第一次出现的未连续重复的字符。换句话说,两者之前和之后的字符都与自身不同(或分别是字符串的开始/结束)。

例子:

IN: aabbcdecc
OUT: c

请注意,“不连续重复”并不意味着“字符串中的任何地方”。

注意:必须是纯正则表达式。例如。显然想到的解决方案(克隆字符串,删除所有重复项,并打印第一个剩余字符)不算数,尽管它解决了问题。

这个问题的灵感来自于我对此有点离题的回答:How can I find the first non-repeating character in a string using Perl?

最佳答案

(?:(.)\1+)*(.?)

获得第二次捕获。 (如果每个字符都连续重复,将返回一个空字符串。)

测试用例:

~:2434$ perl -e "\"abc\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
a
~:2435$ perl -e "\"aabbcc\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"

~:2436$ perl -e "\"aabbc\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
c
~:2437$ perl -e "\"aabcc\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
b
~:2438$ perl -e "\"aabcbbbcccccc\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
b
~:2439$ perl -e "\"aabbvbbcccccc\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
v
~:2440$ perl -e "\"aabbcdecc\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
c
~:2441$ perl -e "\"aabbccddeef\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
f
~:2442$ perl -e "\"faabbccddeef\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
f
~:2443$ perl -e "\"faabbccddeefax\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
f
~:2444$ perl -e "\"xfaabbccddeefx\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
x
~:2445$ perl -e "\"xabcdefghai\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
x
~:2446$ perl -e "\"cccdddeeea12345\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
a
~:2447$ perl -e "\"1234a5678a23\" =~ m/(?:(.)\1+)*(.?)/; print \$2;"
1

或者(如果每个字符都连续重复则不匹配。)

(?:^|(.)(?!\1))(.)(?!\2)

关于regex - 什么是用于查找字符串中第一个非连续重复字符的 Perl 正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com