[英]Regex search the 2 nearest keywords
我想在CREATE TABLE
搜索关键字TIMESTAMP
。 这是我的正则表达式:
(?i)(\s+|^)CREATE\s+TABLE\s+\[\s*\bdbo\b\s*\]\.\[\w+\]\s*\(\s*((.|\n)*)\bTIMESTAMP
但是它在一个查询中搜索CREATE TABLE,在另一个查询中搜索TIMESTAMP。
你能帮我吗?
当您只想搜索创建表和时间戳时,可以使用以下简单的正则表达式:
(?i)(CREATE TABLE|TIMESTAMP)
(?i)可选,用于区分大小写。
您可以使用
(?im)^CREATE\s+TABLE\s+\[\s*dbo\s*\]\.\[\w+\]\s*\(\s*(.*(?:\n(?!CREATE\s+TABLE\b).*)*)\bTIMESTAMP\b
观看此正则表达式演示
如果您的regex无法将CR字符与匹配.
加\\r?
在\\n
之前。
请注意,您不需要dbo
两端的\\b
字边界,因为它位于[...]
内部。
细节
(?im)
-忽略大小写和多行模式 ^
-一行的开始 CREATE\\s+TABLE\\s+\\[
CREATE TABLE [
在单词之间使用任何1+空格 \\s*dbo\\s*
-包含0+空格的dbo
字符串 \\]\\.\\[
-- ].[
字符串 \\w+
-1个以上的字符字符 \\]
- ]
char- \\s*\\(\\s*
-a (
包含0+空格 (.*(?:\\n(?!CREATE\\s+TABLE\\b).*)*)
-组1:
.*
-除换行符外的任何0+个字符 (?:\\n(?!CREATE\\s+TABLE\\b).*)*
-0个或多个序列
\\n(?!CREATE\\s+TABLE\\b)
CREATE TABLE
后面没有换行符 .*
-除换行符外的任何0+个字符 \\bTIMESTAMP\\b
整个单词TIMESTAMP
分两步进行操作可能会更容易。
步骤1:找到“完成”的CREATE TABLE
语句。 实际上,找到最外面的括号的范围。
(?i)(^ *)CREATE\s+TABLE\s+[^()]*\(([^()]*\([^()]*\))*[^()]*\)
在这里测试。
步骤2:在找到的结果字符串中找到timestamp
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.