如何在notepad ++ regex中替换以下内容?

时间:2016-08-22 06:13:22

标签: regex notepad++

我有SQL插入语句。其中一个值是我需要替换的日期。

Insert into table (column_a, column_b) values ('test',to_date('01/DEC/15','DD/MON/RR'));

我有超过1000个Insert SQL语句,如上所述。

我想替换具有格式"to_date('01/DEC/15','DD/MON/RR')"日期的column_b的值可以在函数内更改。我希望将column_b值替换为所有行的"SYSDATE"

我试着跟着什么工作。

^[to_date].*

/to_date([a-zA-Z0-9/,'])+/

/^to_date(.*$/

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

插入表格(column_a,column_b)值('测试',to_date(' 01 / DEC / 15',' DD / MON / RR') ); TO_DATE('

如果to_date函数的语法始终正确,则这将满足您的要求:

to_date\([^)]+\)

这个正则表达式意味着什么:

  • to_date←找到这个文字字符串
  • \(←后跟一个左括号。反斜杠是一个"转义字符。"你需要"逃避括号,"因为括号是用于定义组的正则表达式中的特殊字符。
  • [^)]←后跟一个或多个任何字符,但是一个右括号。括号表示字符集[]。主要的插入符^否定了字符集("不是这个集")。
  • \)←后跟一个右括号。同样,因为这是一个文字括号而不是正则表达式组的右括号,所以必须对该字符进行转义。

Notepad++ Screenshot

答案 1 :(得分:1)

答案

to_date\(.+?\)

这匹配......

这是你出错的地方

  • ^的任何使用 - 这是“字符串的开始”锚点。由于您在寻找从不的字符串出现在开头,因此永远不会匹配。
  • [to_date].* - 这是一个匹配零个或多个里面字符的字符类,即“t”,“o”,“_”,“d”,“a”或“e”
  • to_date([a-zA-Z0-9/,'])+ - 这里的括号不会被转义,因此它们不是匹配文字(),而是形成内部字符类的捕获组。由于您错过了字面括号,因此永远不会匹配。
  • to_date(.*$ - 这是一个无效的表达式,因为您错过了捕获组的结束)

答案 2 :(得分:0)

在我看来,在这种情况下,最简单的正则表达式是:

var obj = {item:{title: params.title,description: params.text, link: req.headers['origin']+"/blog/blog-description/"+params.blog_id, guid:req.headers['origin']+"/blog/blog-description/"+params.blog_id}};

var xml2js = require('xml2js');     
var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);
var modXml = xml.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '');
var modXml = xml.replace(/<(?:.|\n)*?>/gm, '');         
var new_text = modXml;

fs.readFile('public/feed.xml', function read(err, data) {
    if (err) throw err;
    var file_content = data.toString();
    var c = file_content.indexOf('</description>');
    var position = c + 14;
    file_content = file_content.substring(position);
    var file = fs.openSync('public/feed.xml','r+');
    var bufferedText = new Buffer(new_text+file_content);
    fs.writeSync(file, bufferedText, 0, bufferedText.length, position);
    fs.close(file);
});

此表达式表示文字字符串“to_date”,后面是25个字符

它会起作用。