正则表达式匹配某些字符的出现

时间:2021-02-18 06:18:55

标签: regex

假设字符串只包含两个字符 - 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

1 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

^(?!.*pp.*kk)[kp]+$

Click for Demo

说明:

  • ^ - 字符串的开始
  • (?!.*pp.*kk) - 否定前瞻以确保当前匹配不应该出现 kk 出现在 pp 之后的任何情况
  • [kp]+ - 匹配 1+ 次出现的 kp
  • $ - 字符串的结尾