正则表达式 - 与可选[]匹配?

时间:2011-08-26 18:31:31

标签: regex

我正在尝试进行模式匹配,从长SQL脚本中删除它具有以下内容的任何位置:

USE [DBName]
USE DBName

我有第一个正则表达式,但第二个呢?我如何指定[]是可选的,但整行必须匹配?

第一句语法:

@"USE \[(.*?)\]"

4 个答案:

答案 0 :(得分:3)

不是很漂亮,但至少这不会捕获USE [DBNameUSE DBName]

^USE (?=\[\w+\]$|\w+$)\[?(\w+)

答案 1 :(得分:2)

?量词表示0或1:

@"USE \[?(.*?)\]?"

这也会匹配USE [DBNameUSE DBName],但由于默认情况下它是贪婪的,所以不会有问题,除非你的SQL脚本中有这样的行(在这种情况下你可能还是希望它们被剥离:P)。

答案 2 :(得分:0)

怎么样:

@"^USE \s ( ([^ \[\] ]+) | (\[ [^ \[\] ]+ \]) )$"

([^ \[\] ]+)匹配任何非[]字符;否则(\[ [^ \[\] ]+ \])会匹配[...]

答案 3 :(得分:0)

您可以使用?量词:

@"USE \[?(\w+)\]?"

它检查前面的表达式是否为零或一个(同样,你忘了逃避“[”和“]”)。