繁体   English   中英

如何使用正则表达式匹配任意字母组合?

[英]How to match any combination of letters using regex?

如何以任意组合和不同长度匹配字母 a,b,c 一次,如下所示:

该表达式应匹配以下情况:

abc
bc
a
b
bca

但不应与这些匹配:

abz
aab
cc
x

使用正则表达式

\b(?!\w*(\w)\w*\1)[abc]+\b

您可以将此模式与任何集合和大小一起使用,只需将[abc]替换为所需的集合...


示例

在此处输入图片说明

(以上输出来自myregextester

^(?=([^a]*a?[^a]*)$)(?=([^b]*b?[^b]*)$)(?=([^c]*c?[^c]*)$)[abc]{1,3}$

适用lookaheads

它以三种变体形式包含此模式: (?=([^a]*a?[^a]*)$)

它说:从这里(开始)到结束最多需要一个a

结合前瞻反向引用

^([abc])((?!\1)([abc])((?!\1)(?!\3)[abc])?)?$

只是为了完善集合:

^(?:([abc])(?!.*\1))+$

想要处理更大的字符集? 没问题:

^(?:([abcdefgh])(?!.*\1))+$

编辑:显然我误读了这个问题; 您不是在验证像"abc""ba"这样的单个字符串,而是试图在更大的字符串中找到全字匹配。 这是我将如何做到的:

\b(?:([abc])(?![abc]*\1))+\b

棘手的部分是确保前瞻不会超出当前匹配的单词的末尾。 例如,如果我离开先行的(?!.*\\1)它会失败,以匹配abcabc za因为先行错误地将标志aza为一体的重复aabc 允许前瞻只查看有效字符 ( [abc]* ) 使其保持足够短的皮带。 如果当前单词中存在无效字符,则无论如何发现它们不是前瞻的工作。

(感谢Honest Abe让我重新注意到这一点。)

试试这个正则表达式:

^([abc])((?!\1)([abc]))?((?!(\1|\2))([abc]))?$

签入正则表达式

^(?=(.*a.*)?$)(?=(.*b.*)?$)(?=(.*c.*)?$)[abc]{,3}$

锚定前瞻将每个字母的出现次数限制为一个。

我在评论中链接了它(这有点像如何在 Java 中找到带有正则表达式的重复字符? )..但更具体地说..正则表达式:

(\w)\1+

将匹配任意两个或多个相同字符。 否定它,你就有了你的正则表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM