我有一些文字
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
答案 0 :(得分:2)
在查找prm
和frm
时,都需要使用两个内部带有tempered ungreedy dot的正向先行来划定边界。此边界是到达tbl
字符串时的边界。试试:
(?s)sel(?=((?!tbl).)*?prm)(?=(?1)*?frm)(?1)*tbl