正则表达式,避免一行,如果一个单词出现在其中

时间:2016-05-29 19:32:04

标签: regex regex-negation regex-lookarounds

我试图在“crusegdf”这个词之前找到某些“喜欢”的行。例如,给出以下输入:

def shared temp-table w-cruseg no-undo field cruise-id like crusegdf.segment-id
define {1} shared temp-table tt-history no-undo like crusegdf.

我只想匹配第二行。但我的正则表达式找到了这两条线。我现在使用的正则表达式是:

(?i)(define|def)(.*?)(temp-table)(.*?)(like)\s*(\bcrusegdf\b)\s*(\.)

2 个答案:

答案 0 :(得分:1)

您不能使用\b来分隔您的字段名称,因为您的输入的字段名称包含点;点不是"字"字符。

而是使用负面向前看一个点,然后使用更多字段名称:

^(?i)(define|def).*?temp-table.*?like\s*\bcrusegdf\b(?!\.\w).*$

请参阅live demo

我还删除了不必要的括号(你的问题并没有说你需要捕获输入)。

答案 1 :(得分:0)

您可以使用此否定前瞻性正则表达式来匹配包含like之类的内容,但不包含define

^(?:(?!\bfield\b).)*like.*

RegEx Demo

(?:(?!\bfield\b).)*将匹配0个或更多在下一个位置没有field的字符。