我需要一个匹配DK的正则表达式|EK| KD| KE.用K[D|E]|[D|E]K
看起来很简单,但这对KDK或KEK序列不起作用(至少在regx101上不起作用)。此正则表达式将匹配前2个字符,但不匹配最后2个字符。它将匹配一个4个字符的字符串,如KDKD或KDKE或KEKE,但向其中任何一个添加K也无法匹配最后2个DK或EK字符。
什么正则表达式将允许这些类型的序列(其中一些是回文)匹配?
编辑为了澄清一点,KDK将匹配我的简单正则表达式中的第一个选项(KD),但不匹配第二个选项(DK)。显然这两个匹配有重叠,我正在寻找一个正则表达式,当有重叠时,它将允许匹配。
EDIT 2而且,我已经意识到这并不一定局限于回文-原始帖子更正,上面。
EDIT 3以下所有内容均应匹配。我不认为这是一个详尽的清单。对于非匹配,不包含列表对(KD、KE、EK、DK)的任何字符都不应匹配。例如,KDDDK将匹配前2个字符(KD)和后2个字符(DK),但不匹配中间的D,因为它的前面和后面都没有K。
KD
KE
EK
DK
KDK
KEK
EKE
DKD
EKD
DKE
KDKD
KDKE
KEKD
KEKE
KDDK
KEEK
DKDK
EKDK
KDEK
DKKD
DKKE
EKKE
EKKD
KEEKE
3条答案
按热度按时间omtl5h9j1#
不要在你的替代方案
[D|E]
中使用管道分隔符,只使用[DE]
。你可以做的是使用一个积极的lookahead
(?=)
或lookbehind(?<=)
来不消耗匹配:https://regex101.com/r/jotsST/1
| 匹配结果| Matches results |
| --| ------------ |
| KD| KD |
| KE| KE |
| DK| DK |
| EK| EK |
| DK、KE| DK, KE |
| KD、DK| KD, DK |
| KE、EK| KE, EK |
| KE,EK,KE| KE, EK, KE |
| KD、DK| KD, DK |
| EK,KD,EK| EK, KD, EK |
w7t8yxp52#
在匹配D或E时,使用查找来匹配K,但不要消耗K。
参见live demo。
7xzttuei3#
其中对称性要求至少为3。
这个可以做9753
将此用作模板。
只需添加更多的组(总奇数),将其扩展到无穷大。
如果你假设一个D K E的回文...
https://regex101.com/r/QRKqNo/1
说明
要以重叠的方式执行相同的操作,请将结尾处的
checks
移动到Assert底部的内部。注意对称性就像它自己的回溯过滤器,对我来说
我觉得很惊讶。