【问题标题】:Regex search in a text editor to look for entries在文本编辑器中进行正则表达式搜索以查找条目
【发布时间】:2012-08-08 19:45:31
【问题描述】:

我正在寻找一个正则表达式来从 sql 中删除注释行。所有的 cmets 都以“COMMENT ON”开头(显然),但可能往往不止一行。我能够想出一个表达式来删除单行,但我正在为多行而苦苦挣扎。我要删除的典型条目如下所示:

COMMENT ON TABLE account_heading IS $$
This table holds the account headings in the system.  Each account must belong 
to a heading, and a heading can belong to another heading.  In this way it is 
possible to nest accounts for reporting purposes.$$;

所以我需要的是一个正则表达式,它遵循多行直到它看到的点 分号。

我想出了这个,它将搜索到第二行并在双美元 ($$) 处停止。我昨天刚开始使用 RegEx,如果这绝对是完全错误的,请原谅我(我确信它是):

^COMMENT ([^\n\r]+)[\n\r]([\$;\n\r]+)

我在 Mac 上使用 Grep 选项在 TextWrangler 中执行此操作。

谢谢!

【问题讨论】:

  • 如果您需要帮助,人们会提供帮助。如果您需要代码,请编写代码。也许发布你的单行正则表达式
  • 已添加。谢谢你的提示。不是想让人们为我做这件事,只是我已经有一段时间了,而正则表达式似乎需要一些时间来学习。只是想知道我什么时候可能会因某项任务而不知所措。
  • SO 非常适合。只是想帮助你避免仇恨:p

标签: sql regex textwrangler


【解决方案1】:

好吧,我对SQL不太了解,但是如果你想要'$$'之间的内容,只需使用:

\${2}[^\${2}]*\${2};

如果您想要“IS”字之后的所有内容:

COMMENT .*? IS ([^;]*)

匹配任何不是分号的内容(获取第一组,而不是匹配项)。

【讨论】:

  • 他们中的许多人都做到了!谢谢!它实际上达到了 $$ 而不是分号。所以我在最后扔了一个分号,它抓住了整个东西。
  • 知道为什么它会忽略某些条目吗?会不会是换行的类型?不幸的是,如果我尝试添加它们,在这里评论会删除行的格式。
  • 啊,这是一个间距问题。我删除了 IS 之后的空格并将其设为“COMMENT .*? IS([^;]*);”它得到了剩下的!非常感谢!
【解决方案2】:

可能类似于COMMENT\sON.*?\$\$; - 如果您能够将编辑器设置为匹配多行(通常通过指定s 标志),它应该可以工作。

【讨论】:

  • 一定是我的编辑。它没有找到任何结果。感谢您的尝试。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多