正则表达式问题 - 搜索a:没有引号的特定模式

时间:2011-05-17 17:39:06

标签: regex

我有一个MYSQL类,我想安全地防止SQL注入,所以我想到了一个检查算法。例如:

query("SELECT * FROM xyz WHERE id = @1 AND name = '@2' AND pwd = '@3' AND somenumber = @4", param1, param2, param3, param4) 

此正则表达式必须与@ 1和@ 4匹配,因此第一个和第四个参数应为整数。

我试过了:

[^'"]@\d+[^'"]

但它不匹配:

@1,@4,@5

什么是正确的表达?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果您想要@ 123而不是“@ 123”,请使用

(?<!["'])@\d+(?!['"])

你的正则表达式做了什么:

  • [^'"]匹配一个«除了 字符串'“»
  • @\d+匹配一个符号和as 尽可能多的数字
  • [^'"]匹配另一个«任何东西 但字符串'“»

因此它会匹配d @ 12),@ @ 0 @,k @ 09。 ......