包含单词,但不包含前面的特定单词

时间:2015-02-02 05:09:53

标签: java c# regex

我需要正则表达式方面的帮助。代码在SQL中,我希望匹配不引用代理数据库的所有字符串。

模式将是: 包含..,前面的字词不等于proxy

我想匹配以下示例字customer

from proxy..vw_xxx a join customer..vw_xxx b
from proxy..vw_xxx
insert into proxy..vw_xxx
from customer..vw_xxx

修改: 如果我还想捕获DDL语句怎么样? 例如: CREATE VIEW vw_yyy AS ... from proxy..vw_xxx a join customer..vw_xxx b from proxy..vw_xxx insert into proxy..vw_xxx from customer..vw_xxx GO CREATE VIEW vw_zzz AS SELECT * FROM customer.vw_xxx GO

我想捕获第一个CREATE VIEW。 我使用了正则表达式:

  

创建视图。* \ w +(?<!proxy)... * GO

和 / gmis选项 但它也匹配第二次创建视图。

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:3)

使用基于负面lookbehind的正则表达式。

java regex

"\\w+(?<!proxy)\\.\\."

C#regex

@"\w+(?<!proxy)\.\."

\w+仅匹配一个或多个单词字符,并且只有在点前面没有单词proxy时才会跟随双点。

DEMO

String s = "from proxy..vw_xxx a join customer..vw_xxx b\n" + 
        "from proxy..vw_xxx\n" + 
        "insert into proxy..vw_xxx\n" + 
        "from customer..vw_xxx";
Matcher m = Pattern.compile("\\w+(?<!proxy)\\.\\.").matcher(s);
while(m.find())
{
    System.out.println(m.group());
}

输出:

customer..
customer..
相关问题