我正在尝试进行模式匹配,从长SQL脚本中删除它具有以下内容的任何位置:
USE [DBName]
USE DBName
我有第一个正则表达式,但第二个呢?我如何指定[]
是可选的,但整行必须匹配?
第一句语法:
@"USE \[(.*?)\]"
答案 0 :(得分:3)
不是很漂亮,但至少这不会捕获USE [DBName
或USE DBName]
:
^USE (?=\[\w+\]$|\w+$)\[?(\w+)
答案 1 :(得分:2)
?
量词表示0或1:
@"USE \[?(.*?)\]?"
这也会匹配USE [DBName
或USE DBName]
,但由于默认情况下它是贪婪的,所以不会有问题,除非你的SQL脚本中有这样的行(在这种情况下你可能还是希望它们被剥离:P)。
答案 2 :(得分:0)
怎么样:
@"^USE \s ( ([^ \[\] ]+) | (\[ [^ \[\] ]+ \]) )$"
([^ \[\] ]+)
匹配任何非[]
字符;否则(\[ [^ \[\] ]+ \])
会匹配[...]
。
答案 3 :(得分:0)
您可以使用?
量词:
@"USE \[?(\w+)\]?"
它检查前面的表达式是否为零或一个(同样,你忘了逃避“[”和“]”)。