我需要正则表达式方面的帮助。代码在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选项 但它也匹配第二次创建视图。
非常感谢任何帮助。感谢。
答案 0 :(得分:3)
使用基于负面lookbehind的正则表达式。
java regex
"\\w+(?<!proxy)\\.\\."
C#regex
@"\w+(?<!proxy)\.\."
\w+
仅匹配一个或多个单词字符,并且只有在点前面没有单词proxy
时才会跟随双点。
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..