regex - 搜索包含两个单词的 block

标签 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”结尾的 block 。该 block 包含两个单词“prm”和“frm”。 也就是说,该 block 由单词序列“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

最佳答案

您需要使用两个正向前瞻 tempered ungreedy dot在查找 prmfrm 时在内部放置边界。此边界是到达 tbl 字符串时的边界。尝试:

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

参见live demo here

关于regex - 搜索包含两个单词的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54167820/

相关文章:

java - 如何在java中编写和使用正则表达式

javascript - 重写Javascript路径字符串

java - 有人可以帮我澄清我对这个正则表达式的理解吗?

regex - Notepad++ 和正则表达式 : how to UPPERCASE specific part of a string/find/replace

html - 用于在 html 中标记文本的 Notepad++ 或 netbeans 插件

正则表达式在字符串中查找单词,替换新字符串中的单词(使用 Notepad++)

regex - 为特定网址强制使用 HTTPS

javascript - 如何使用正则表达式从字符串的末尾开始匹配

正则表达式匹配换行符-为什么?

reference - 在 Notepad++ 中添加对 CS 脚本的引用