【问题标题】:Regular expression for " and ' in javajava中“和”的正则表达式
【发布时间】:2013-12-06 02:16:03
【问题描述】:

我有一个像这样的字符串 "Marko's place" "boulevard "Arequipa"" 包含单引号或双引号的字符串,在 Java 中使用正则表达式如何让前面的字符串变得像这样 "Marko\s place" "boulevard \ "Arequipa\"" 我对正则表达式没有经验,谢谢您的回答

好的,我正在从 mysql 表中读取记录并构造插入 sql 以将此信息传递给 sqlite 表

    Statement qryMySQL= cnMySql.createStatement();
        ResultSet rs = qryMySQL.executeQuery("select * from tblclientes ");

        Statement qrySQLite = cnSqLite.createStatement();
        qrySQLite.addBatch("begin transaction");
        qrySQLite.addBatch("CREATE TABLE 'tblclientes' ('_id' INTEGER,'Nombres' varchar(25) DEFAULT NULL,'Apellidos' varchar(25) DEFAULT NULL,'RazSocial' varchar(20) DEFAULT NULL,'Direccion' varchar(50) DEFAULT NULL,'Ciudad' varchar(15) DEFAULT 'Arequipa','Fono' varchar(12) DEFAULT NULL,'Fax' varchar(12) DEFAULT NULL,'Email' varchar(35) DEFAULT NULL,'Ruc' varchar(12) DEFAULT NULL,'latitud' decimal(20,14) DEFAULT NULL,'longitud' decimal(20,14) DEFAULT NULL,'ruta' varchar(10) DEFAULT NULL,'sincro' CHAR(10),'copiar' BOOL DEFAULT 1)");

        while (rs.next()) 
        { 
            //System.out.println (rs.getInt(1) + " " + rs.getString (2) );
            sql = "INSERT INTO tblclientes(_id,nombres,apellidos) " +
                    "VALUES("+rs.getInt("id")+", \""+rs.getString("nombres")+"\",\""+rs.getString("apellidos")+"\")";
            qrySQLite.addBatch(sql);
           // System.out.println (sql);
        }
        qrySQLite.addBatch("end transaction");
        qrySQLite.executeBatch();

但是 mysql 表中的某些字段有字符 " 和 ' 导致 sql 插入语句中的错误然后我需要这个

<Marko's place> ===> <Marko\'s place>
<boulevard "Arequipa"> ====> <boulevard \"Arequipa">

所以结果必须在 " 或 ' 之前添加 \

【问题讨论】:

  • 请准确描述您的需求(举几个例子)。您提供的示例并未明确定义您要查找的内容。您是一次处理一个字符串还是多个字符串?看起来您想保留打开和关闭双引号,但不清楚应该如何定义它们。您的输入是 single 字符串还是多个字符串?它们是否由换行符分隔?
  • 感谢您的澄清。下面是一些关于转义 SQL 字符串的问答:one、two、three。
  • Apache 的 StringEscapeUtils 中的 escapeSql() 和/或 escapeJava() 方法看起来完全符合您的需求。
  • 请注意,SQL 字符串中的引号通常被另一个引号字符(不是反斜杠)转义。例如,您通常会使用以下命令来逃避 Joe's Diner:Joe''s Diner
  • escapeSql() 方法正是我需要的,谢谢

标签: java regex escaping


【解决方案1】:

我可能会使用 Apache Commons StringEscapeUtils 它可以捕获比您的问题更多的极端案例 -

StringEscapeUtils.escapeJava(str);

否则,你可以像这样使用字符串替换

String str = "\"Marko's place\"";
System.out.println(str.replace("'", "\\'").replace("\"", "\\\""));

【讨论】:

  • yes StringEscapeUtils.escapeJava(str) 帮助我找到 escapeSql() 告诉我 jahroy 谢谢
  • 你也可以使用 prepare 和 bind。
猜你喜欢
  • 2015-12-29
  • 2015-04-27
  • 2014-01-03
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多