如何解决正则表达式以正面朝后的方式匹配多个字符串
| 因此,我一直试图结合以下两个问题的答案: C#分割字符串,但保留分割字符\\分隔符 正则表达式以匹配多个字符串 本质上,我希望能够将字符串拆分为某些字符串,并在输出数组Regex.Split()
中也包含拆分字符串。到目前为止,这是我尝试过的:
// ** I\'d also like to have UNION ALL but not sure how to add that
private const string CompoundSelectRegEx = @\"(?<=[\\b(UNION|INTERSECT|EXCEPT)\\b])\";
string sql = \"SELECT TOP 5 * FROM Persons UNION SELECT TOP 5 * FROM Persons INTERSECT SELECT TOP 5 * FROM Persons EXCEPT SELECT TOP 5 * FROM Persons\";
string[] strings = Regex.Split(sql,CompoundSelectRegEx);
问题是它开始匹配单个字符,例如E和U,所以我得到了不正确的字符串数组。
我也想在UNION ALL周围进行匹配,但是由于那不仅仅是一个单词,而是一个字符串,我不确定如何在上述正则表达式中添加它,因此如果有人可以将我指向正确的方向,那太好了!
谢谢!
解决方法
如果要拆分这些单词并将其包括在结果中,只需在它们之间交替并放置在组中即可。无需环顾四周。此模式应符合您的需求:
string pattern = @\"\\b(UNION(?:\\sALL)?|INTERSECT|EXCEPT)\\b\";
(?:\\sALL)?
使单词ALL
可选匹配。 “ 5”部分表示匹配,但未捕获指定的模式。组末尾的?
使其成为可选项。如果要修整结果,可以在花样的末尾添加一个“ 7”。
请注意,这可能适用于简单的SQL语句,但是一旦开始处理嵌套查询,上述方法就可能失效。那时,正则表达式可能不是最佳解决方案,您应该开发一个解析器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。