我需要使用正則表達式進行MySQL查詢,部分條件包含括號。
我知道如何通過使用雙反斜槓來避免MySQL中的括號。
但是,當我把查詢放入要在perl中使用的字符串時,這似乎不起作用。
我試圖用撇號括起字符串,並再次嘗試使用引號無濟於事。
例如:mysql:如何在perl字符串中隱藏括號
select * from table where fieldname regexp '.\\(.';
從MySQL上述作品,但給了我錯誤的Perl:「括號不均衡」
我需要使用正則表達式進行MySQL查詢,部分條件包含括號。
我知道如何通過使用雙反斜槓來避免MySQL中的括號。
但是,當我把查詢放入要在perl中使用的字符串時,這似乎不起作用。
我試圖用撇號括起字符串,並再次嘗試使用引號無濟於事。
例如:mysql:如何在perl字符串中隱藏括號
select * from table where fieldname regexp '.\\(.';
從MySQL上述作品,但給了我錯誤的Perl:「括號不均衡」
我想象的錯誤,如果你通過
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 '.\\(.';
完美!謝謝!這就是訣竅:) –
這是最容易使用的DBI的quote
安全插值變量爲SQL字符串,如果你用肉眼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");
,你可以把你的Perl代碼,你做的數據庫調用? – tadman
@XiVix你需要格式化雙反斜槓的代碼才能顯示出來,看看我是如何編輯你的問題的:)總的來說,最好將這樣的實際代碼格式化,而不是將它放入文本中。 –
您需要顯示您的Perl代碼,因爲這似乎是問題區域。 – cjm