正则表达式 - 与可选[]匹配?
我试图做一个模式匹配来剔除,从长SQL脚本,任何地方它有以下几点:正则表达式 - 与可选[]匹配?
USE [DBName]
USE DBName
我有了第一个正则表达式,但对于第二个?我如何指定[]
是可选的,但是整行必须匹配?
语法第一:
@"USE \[(.*?)\]"
如何:
@"^USE \s (([^ \[\] ]+) | (\[ [^ \[\] ]+ \]))$"
的([^ \[\] ]+)
匹配任何非[]
字符;否则,(\[ [^ \[\] ]+ \])
匹配[...]
。
这并不是真的如何工作。您可能需要'@“^ USE \ s([^ \ [\]] + | \ [[^ \ [\]] + \])$”' – Kobi
谢谢大家。我在应用所有建议时必须做错,因为当我在文件/字符串中使用USE语句时,无法完全找到匹配项:USE [TestDB] –
可以使用?
量词:
@"USE \[?(\w+)\]?"
它检查是否存在零或前面的表达式(也,你忘逃脱“[”和“]”)中的一个。
Thanks all。在应用所有建议时,我必须做错某些事情,因为当我在文件/字符串中使用USE语句时,它无法完全找到匹配项:USE [TestDB] –
@Ahmed ilyas,检查答案的编辑。我已经将'\。*?'(任何字符,不是贪婪)改成了'\ w +?'(至少有一个字是char,而不是贪婪)。它将匹配任何可能的数据库名称,因为数据库名称不能包含任何不是字母,数字或下划线的字符。 “任何字符”部分扭曲了正则表达式。 (并且不要忘记将“不区分大小写”标志添加到正则表达式=)。 – Raphael
的?
量词是指0或1:
@"USE \[?(.*?)\]?"
这也将匹配USE [DBName
或USE DBName]
,但因为它是默认的贪婪它不会是一个问题,除非你确实有这样的行你的SQL脚本(在这种情况下,你可能希望它们被剥离:P)。
不是很漂亮,但至少这不会捕捉USE [DBName
或USE DBName]
:
^USE (?=\[\w+\]$|\w+$)\[?(\w+)
那是一个.net正则表达式?你应该添加适当的标签。 – Kobi
你应该接受最能帮助你的答案。 – Raphael