假设字符串只包含两个字符 - k 和 p。什么正则表达式将匹配所有 k 对出现在 p 对之前的字符串?
到目前为止,我有以下表达式,但它没有捕获所有情况(重复 k 并以 kk 结尾的情况):
^(k*|k+p{1}|k{1}p+)[kp]*(kpkk|pk|pp|kp)$
字符串示例:
k // match
kk // match
kkkkpp // match
kkppk // match
ppppkkp // no match
kppppppkk // no match
kppk // match
kpkpkpkpkp // match
kppkpkk // match
答案 0 :(得分:2)
试试这个正则表达式:
^(?!.*pp.*kk)[kp]+$
说明:
^
- 字符串的开始(?!.*pp.*kk)
- 否定前瞻以确保当前匹配不应该出现 kk
出现在 pp
之后的任何情况[kp]+
- 匹配 1+ 次出现的 k
或 p
$
- 字符串的结尾