我有以下.NET正则表达式在以下时间不起作用
我正在寻找Regex解决方案(而不是解析器)来修改此模式以匹配上述两个问题。拥有更多Regex经验的人可以改善它吗?
(?'?) (?
\ B)?(?:\ s *(?
REGEX STORM .Net Tester
该模式使用字符序列减法-regex101支持吗?
捕获组: 如果字段包含空格或非字母数字,则字段可以选择用坟墓(`)或方括号([])包围。
值可以用单引号(')引起来。使用两个单引号转义一个单引号。使用方括号“ [*]”和“ [%]”转义通配符“ *”和“%”。用方括号“ [[]”和“ []]”转义方括号“ [”和“]”
布尔运算符可以是OR或AND
比较运算符可以是=,<,>或LIKE
模式是Microsoft Expression Filter的简化,仅处理上述子集。
下面应该起作用的示例。
每个示例在单独的一行上。正则表达式可以在每行上多次匹配。
例如:
“ a类似于'b [*]'或[b]类似于'c's'并且d = f或e ='d'“将匹配:
a像'b [*]'或[b]像'c's'AND d = f OR e ='d'
[a b] ='d'
`e f g`>'f'
g <4
h =''
i ='3'
[全名] =”
FirstName LIKE'hello'
[名字] ='g'
年龄> 6
全名=''
答案 0 :(得分:1)
从此处使用.net版本可以节省大量时间和麻烦吗?
我必须承认,我并不是从那些解析器的经验出发,而是从人们使用正则表达式(包括年轻时的我自己)而不是解析器的HTML / CSS解析遇到的类似问题中获益。
如果采用解析器方法,它更具可读性,不易出错,更易于调试或维护,并且总时间更少。
例如:
TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvmysql);
sqlparser.sqltext = "ALTER TABLE `world`.`t1` ALTER `c1` SET DEFAULT 'abc';";
Assert.IsTrue(sqlparser.parse() == 0);
TAlterTableStatement alterTableStatement = (TAlterTableStatement)sqlparser.sqlstatements.get(0);
TAlterTableOption alterTableOption = alterTableStatement.AlterTableOptionList.getAlterTableOption(0);
Assert.IsTrue(alterTableOption.OptionType == EAlterTableOptionType.AlterColumn);
Assert.IsTrue(alterTableOption.DefaultExpr.ToString().Equals("'abc'", StringComparison.CurrentCultureIgnoreCase));
显示如何从alter table语句中成功提取DEFAULT的值:
"ALTER TABLE `world`.`t1` ALTER `c1` SET DEFAULT 'abc';";
我确信您可以对语句执行类似的操作,只需传递您要解析的任何字符串,而不是硬编码文本即可。
很抱歉,这不是一个完整的答案(放在拼盘上,粘贴粘贴),如果我认为它可以很好地展示,我会在评论中注明。希望这样,当您看到它的简单性时,您会改变主意。
我绝不隶属于作者,如果您发现更适合自己的东西,也不建议使用它,我只是说要使用此方法并在实际操作中演示它。