Regex 正则表达式搜索2个最近的关键字
我想在Regex 正则表达式搜索2个最近的关键字,regex,Regex,我想在创建表中搜索关键字时间戳。这是我的正则表达式: (?i)(\s+|^)CREATE\s+TABLE\s+\[\s*\bdbo\b\s*\]\.\[\w+\]\s*\(\s*((.|\n)*)\bTIMESTAMP 但它在一个查询中搜索createtable,在另一个查询中搜索TIMESTAMP 您能帮助我吗?当您只想搜索创建表和时间戳时,您可以使用以下简单的正则表达式: (?i)(CREATE TABLE|TIMESTAMP) 不区分大小写的(?i)选项。当您只想搜索创建表和时间戳时
创建表
中搜索关键字时间戳
。这是我的正则表达式:
(?i)(\s+|^)CREATE\s+TABLE\s+\[\s*\bdbo\b\s*\]\.\[\w+\]\s*\(\s*((.|\n)*)\bTIMESTAMP
但它在一个查询中搜索createtable,在另一个查询中搜索TIMESTAMP
您能帮助我吗?当您只想搜索创建表和时间戳时,您可以使用以下简单的正则表达式:
(?i)(CREATE TABLE|TIMESTAMP)
不区分大小写的(?i)选项。当您只想搜索创建表和时间戳时,可以使用以下简单的正则表达式:
(?i)(CREATE TABLE|TIMESTAMP)
(?i)选项不区分大小写。您可以使用
(?im)^CREATE\s+TABLE\s+\[\s*dbo\s*\]\.\[\w+\]\s*\(\s*(.*(?:\n(?!CREATE\s+TABLE\b).*)*)\bTIMESTAMP\b
看
如果正则表达式无法将CR字符与
匹配,请在\n
之前添加\r?
注意,dbo
的两端不需要\b
单词边界,因为它位于[…]
内
详细信息
-忽略屏幕上的大小写和多行模式(?im)
-行的开头^
-CREATE\s+TABLE\s+\[
在单词之间有1+空格CREATE TABLE[
-一个\s*dbo\s*
字符串,用0+空格括起来dbo
-\]\.\[
字符串].[
-1+字字符\w+
-\]
char -]
-a\s*\(\s*
用0+空格括起来(
-第1组:(.*)(.**:\n(?!CREATE\s+TABLE\b)。*)*)
-除换行符以外的任何0+字符*
-0个或多个(?:\n(?!CREATE\s+TABLE\b)。*)*
-换行符后面没有\n(?!CREATE\s+TABLE\b)
CREATE TABLE
-除换行符以外的任何0+字符*
-一个完整的单词\b时间戳\b
时间戳
(?im)^CREATE\s+TABLE\s+\[\s*dbo\s*\]\.\[\w+\]\s*\(\s*(.*(?:\n(?!CREATE\s+TABLE\b).*)*)\bTIMESTAMP\b
看
如果正则表达式无法将CR字符与
匹配,请在\n
之前添加\r?
注意,dbo
的两端不需要\b
单词边界,因为它位于[…]
内
详细信息
-忽略屏幕上的大小写和多行模式(?im)
-行的开头^
-CREATE\s+TABLE\s+\[
在单词之间有1+空格CREATE TABLE[
-一个\s*dbo\s*
字符串,用0+空格括起来dbo
-\]\.\[
字符串].[
-1+字字符\w+
-\]
char -]
-a\s*\(\s*
用0+空格括起来(
-第1组:(.*)(.**:\n(?!CREATE\s+TABLE\b)。*)*)
-除换行符以外的任何0+字符*
-0个或多个(?:\n(?!CREATE\s+TABLE\b)。*)*
-换行符后面没有\n(?!CREATE\s+TABLE\b)
CREATE TABLE
-除换行符以外的任何0+字符*
-一个完整的单词\b时间戳\b
时间戳
- 分两步进行可能更容易
步骤1:找到“complete”
createtable
语句。实际上,找到最外层括号的范围
(?i)(^ *)CREATE\s+TABLE\s+[^()]*\(([^()]*\([^()]*\))*[^()]*\)
测试
步骤2:在结果中找到的字符串中查找
时间戳。分两步进行可能更容易
步骤1:找到“complete”createtable
语句。实际上,找到最外层括号的范围
(?i)(^ *)CREATE\s+TABLE\s+[^()]*\(([^()]*\([^()]*\))*[^()]*\)
测试
步骤2:在找到的字符串中查找时间戳
。请编辑您的问题并显示清晰的示例输入数据(正反两种情况),并告诉我们预期的输出是什么。输入文本中的每个SQL语句后,GO
是否单独出现在一行上?(在您的regex101示例中,它出现在第一条语句之后,但不出现在第二条语句之后--我不知道您在粘贴第二条语句时是否遗漏了它)。看起来您正试图使用regex实现解析器。这是错误的。请使用解析器。它们是两件不同的事情,regex不能单独用于编写正确的解析器(尽管正则表达式lexer可能是解析器的有用组件)。请编辑您的问题并显示清晰的示例输入数据(正反两种情况),同时告诉我们预期的输出是什么。GO
是否在输入文本中的每个SQL语句后单独出现在一行上?(在您的regex101示例中,它出现在第一条语句之后,但不出现在第二条语句之后--我不知道您在粘贴第二条语句时是否遗漏了它)。看起来您正试图使用regex实现解析器。这是错误的。请使用解析器。它们是两件不同的事情,regex不能单独用于编写正确的解析器(尽管正则表达式lexer可能是解析器的有用组件)。我认为,这并没有回答OP的问题。OP似乎在寻找CREATE TABLE
语句中是否出现了timestamp
值。然后我就理解错了。我认为他必须多描述一点他想要实现的目标。如果你看一下提供的regex101示例OP,就会更清楚一些。这并不意味着对于OP的问题,我认为。OP似乎在寻找值timestamp
是否出现在CREATE TABLE
语句中。然后我理解错了。我认为他必须更详细地描述他想要实现的目标。如果你看一下regex101示例,OP会变得更清晰。