需要有关编辑器中搜索/替换的正则表达式的帮助

时间:2010-11-25 20:14:50

标签: sql regex

我正在尝试使用now()函数替换SQL转储中的所有时间戳。所有时间都有所不同,但这一年总是在2010年。

我想替换:'2010-10-0920:40:00.352298-05' with:now()

有谁知道我可能会使用哪种表达方式来保持2010年的静态?

3 个答案:

答案 0 :(得分:2)

最简单的正则表达式是匹配从2010年开始的任何字符串,从开头报价到结束报价:

/'2010-.*?'/

这会找到以2010开头的字符串,并且与第一个引号进行非贪婪的匹配,这应该是结束引用,因为日期实际上不能包含转义的引号。

如果这不够具体,您可以限制匹配的字符的类型和数量:

/'2010-[-.0-9:]{15,25}'/

我不知道如何在不知道你正在使用什么编辑器的情况下运行这个正则表达式,但是在vim中,非贪婪匹配的语法略有不同:

:%s/'2010-.\{-}'/now()/g

答案 1 :(得分:1)

尝试

2010-\d+-\d+:\d+:\d+\.\d+-\d+

或者,如果引号实际上是文本的一部分

'2010-\d+-\d+:\d+:\d+\.\d+-\d+'

答案 2 :(得分:1)

s/2010-.{23}/now()/g

因为“2010-”之后有23个字符。

使用

s/'2010-.{23}'/now()/g

如果你想摆脱报价。