mysql:如何在perl字符串中转义括号

时间:2014-01-06 20:31:00

标签: mysql regex perl escaping parentheses

我需要使用正则表达式进行MySQL查询,部分条件包含括号 我知道如何通过使用双反斜杠来逃避MySQL中的括号 但是,当我将查询放在要在perl中使用的字符串时,这似乎不起作用。
我已经尝试将字符串括在撇号中,并再次尝试使用引号无效 例如:

select * from table where fieldname regexp '.\\(.';

上面的工作来自MySQL,但在perl中给出了错误:“括号不平衡”

2 个答案:

答案 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");