搜索包含两个单词的块

时间:2019-01-13 10:07:41

标签: regex notepad++

我有一些文字

  

1 fgj sel dfjkd prm jfkdl frm jkl tbl klk

     

2 ledk prm jkl jkk frm jkl tbl jkl fjj

     

3 jklj sel prm kljlk jkjkl jkkl tbl emel

     

4 rui jkljl sel jklj jklj prm jkjl

     

5 jljkj frm jkljl jlj tbl mjljlk

我需要以“ sel”开头并以“ tbl”结尾的块。并且此块包含两个单词“ prm”和“ frm”。 即,该块由单词“ sel”,“ prm”,“ frm”,“ tbl”的序列组成 正确的答案应该是(第一行的一部分,第四和第五行的一部分)

  

sel dfjkd prm jfkdl frm jkl tbl

     

sel jklj jklj prm jkjl

     

5 jljkj frm jkljl jlj tbl

我尝试过,但是对我不起作用

(sel)*?(prm|frm)?*(tbl)

等等

\bsel\b.*?\bprm\b.*?\bfrm\b.*?\btbl\b

1 个答案:

答案 0 :(得分:2)

在查找prmfrm时,都需要使用两个内部带有tempered ungreedy dot的正向先行来划定边界。此边界是到达tbl字符串时的边界。试试:

(?s)sel(?=((?!tbl).)*?prm)(?=(?1)*?frm)(?1)*tbl

请参见live demo here