繁体   English   中英

正则表达式搜索最近的2个关键字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM