2012-11-21 48 views
0

我想檢查一個MySQL查詢的值是否包含%字符(可以多次出現),但不包含轉義的\%使用Regex檢查'%'字符的MySQL查詢值

因此,它應該符合:

  • '%test'
  • '%test\%'
  • 'test\\%' - 應該匹配,因爲它是逃避\不是%
  • '%test\%%'
  • '\%test%test\%'

但不是:

  • 'test\%'
  • '\%test\%'
  • '\%test\%test\%'

我不是在正則表達式好,有人可以幫我在這?

在此先感謝。

編輯
我試圖從一個陣列生成SQL查詢創建一個PHP庫,並可能生成的查詢將主要用於在MySQL。
因此,正則表達式過濾過程將在PHP中。

對不起,我忘了提及這一點。

感謝

+0

RDBMS是什麼? SQLSERVER? MySQL的?甲骨文?......? –

回答

1

入住這對PHP代碼:

unset($str1,$str2,$str3,$str4,$str5,$str6,$str7); 

$str1 = '%100'; 
$str2 = '%100\%'; 
$str3 = "100\\\\%"; 
$str4 = "%100\\%%"; 
$str5 = '100\%'; 
$str6 = "100\\\\\\\\%"; 
$str7 = "100\\\\\\%"; 
$str8 = "100\\\\\\\\\\\\%"; 
$str9 = "100\\\\\\\\\\\\\\%"; 

$reg_exp= '/^%|[^\x5C]%|[^\x5C](\x5C\x5C)+%/'; 

echo $str1.' = '.preg_match($reg_exp, $str1).'<br />'; 
echo $str2.' = '.preg_match($reg_exp, $str2).'<br />'; 
echo $str3.' = '.preg_match($reg_exp, $str3).'<br />'; 
echo $str4.' = '.preg_match($reg_exp, $str4).'<br />'; 
echo $str5.' = '.preg_match($reg_exp, $str5).'<br />'; 
echo $str6.' = '.preg_match($reg_exp, $str6).'<br />'; 
echo $str7.' = '.preg_match($reg_exp, $str7).'<br />'; 
echo $str8.' = '.preg_match($reg_exp, $str8).'<br />'; 
echo $str9.' = '.preg_match($reg_exp, $str9).'<br />'; 

http://ideone.com/Bgq5bV

+0

第三條語句返回0.但預期有1個 – adods

+0

我編輯了reg_exp。讓我檢查答案(我認爲這不適用於許多連續\\) – RainHeart257

+0

現在完美了;-) – RainHeart257

1

假設SQL Server中,這應該工作:

WHERE 
    ColumnX LIKE '%[%]%' ESCAPE '\' 

雖然我不知道這是否正確處理\\%

這應該在任何情況下工作:

WHERE 
    REPLACE(REPLACE(ColumnX, '\\', ''), '\%', '') LIKE '%[%]%'