0

%MySQLクエリの値に文字が含まれているか(複数回表示される可能性があります)、エスケープされていないかどうかを確認したいと思います\%

したがって、一致する必要があります。

  • '%test'
  • '%test\%'
  • 'test\\%'-エスケープでは\なく、一致する必要があります%
  • '%test\%%'
  • '\%test%test\%'

だがしかし:

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

私は正規表現が苦手ですが、誰かが私を助けてくれますか?

前もって感謝します。

編集
配列からSQLクエリを生成するためのPHPライブラリを作成しようとしていますが、生成されたクエリは主にMySQLで使用される可能性があります。
したがって、正規表現のフィルタリングプロセスはPHPで行われます。

申し訳ありませんが、これについて言及するのを忘れました。

ありがとう

4

2 に答える 2

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

于 2012-11-21T08:31:32.147 に答える
1

SQL Server を想定すると、これは機能するはずです。

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

\\%それが正しく処理されるかどうかはわかりませんが。

これはどのような場合でも機能するはずです:

WHERE
  REPLACE(REPLACE(ColumnX, '\\', ''), '\%', '') LIKE '%[%]%'
于 2012-11-21T07:20:48.757 に答える