在以下单词列表中
ABCD
AAAA
AAAD
AAAB
BBDA
CCCC
CCCA
DADA
BABC
...
all possible 256 combinations
Run Code Online (Sandbox Code Playgroud)
使用regrex,我要选择模式为A或B的单词,它们的任何组合都覆盖4个准确的3个位置。
预期产量:
AAAD
BBDA
BABC
Run Code Online (Sandbox Code Playgroud)
我知道使用[AB] {4}可以匹配整个世界,但条件搜索中4个位置中的3个位置恰好会造成混乱。
只是改写并确认您说的匹配规则,以便我的解决方案坚持下去,
A,BC或D如果正确,则可以使用此正则表达式匹配所需的字符串。
^(?=[AB]*[CD][AB]*$).{4}$
Run Code Online (Sandbox Code Playgroud)
以上正则表达式的说明:
^ -字符串开始(?=[AB]*[CD][AB]*$)-积极向前看以确保在字符串中只出现一次C或D只出现一次,因此As和Bs 占据其他三个位置.{4}$-捕获四个字母A到D使用点,因为他们已经证实是A对D的未来积极的样子。这是一个regulex图,可实现更好的可视化
编辑:
详细说明(?=[AB]*[CD][AB]*$)
一个积极的先行写成(?=some regex)的,违反了正常的正则表达式匹配和消费,一个环视(正极/负极前瞻/回顾后)只是相匹配的字符,并且不消耗他们,只要环视表达过的意思,正则表达式标志是重设到lookround开始匹配之前的位置。在此正则表达式中,我们有一个[AB]*[CD][AB]*$表达式,其中[AB]*表示它将与集合(A或B)中的任何字符匹配零次或更多次,其次[CD]意味着它需要与字符集中的一个字符(因为这里没有量词)完全匹配。是C或D再[AB]*匹配任何字符A或B零次或多次,最后确保达到字符串的末尾$。
总而言之,该表达式的逻辑含义是,根据需要,将出现一个C或正好D被As或B任一边包围的一次,以形成四个字母,与四个只出现C或的四个字母的所有组合匹配D。
此外,通过revo合并的建议[A-D]可以在其中更改为“ .非常感谢Revo”。