我需要使用正则表达式进行MySQL查询,部分条件包含括号
我知道如何通过使用双反斜杠来逃避MySQL中的括号
但是,当我将查询放在要在perl中使用的字符串时,这似乎不起作用。
我已经尝试将字符串括在撇号中,并再次尝试使用引号无效
例如:
select * from table where fieldname regexp '.\\(.';
上面的工作来自MySQL,但在perl中给出了错误:“括号不平衡”
答案 0 :(得分:2)
我想如果你通过
就会得到错误select * from table where fieldname regexp '.\(.';
而不是
select * from table where fieldname regexp '.\\(.';
您确定正确构建了字符串吗?我怀疑你确实构建了以前的字符串。
例如,代码
"select * from table where fieldname regexp '.\\(.';"
产生不合需要的字符串
select * from table where fieldname regexp '.\(.';
代码
"select * from table where fieldname regexp '.\\\\(.';"
生成所需的字符串
select * from table where fieldname regexp '.\\(.';
答案 1 :(得分:1)
如果您正在使用裸SQL,最简单的方法是使用DBI的quote
将变量安全地插入到SQL字符串中(注意,常见的惯例是使用某种类型的SQL接口,而不是整个时间段)原因超出了这个答案的范围。)
所以快速/方便地实现你想要的是:
#Assume $dbi is a handle to your database.
my $reg = $dbh->quote(".\\(.");
my $sth = $dbh->prepare("select * from mailone where msub regexp $reg limit 1");