关于正则表达式模式的困惑

Confusion regarding regex pattern

我尝试编写一个正则表达式来捕获句子中的某些单词,但它不起作用。以下正则表达式仅在我给出完全匹配时才有效。

[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))

假设我发送了一个 HTTP Header - headerName = insert 它有效,

但是当我给 headerName = awesome insert number

时不起作用

--编辑--

@user1180,是的,我可以使用准备好的语句,但我们也在研究正则表达式部分。

@Marcel 和 Wiktor,是的,它正在那个网站上工作。我想我的工具无法识别正则表达式。我正在使用 Mulesoft ESB,它使用 Matches when the evaluated value fits a given regular expression (regex), specifically a regex "flavor" supported by Java.

它正在使用这样的东西, matches /\+(\d+)\s\((\d+)\)\s(\d+\-\d+)/ 而且我不知道如何用这种正则表达式格式编写我的用例。

我的用例太捕捉 SQL 注入模式,它会检查请求 header/queryparam 的 delete (exec)(drop\s*table)(insert)(shutdown)(update)or 参数。

由于您的正则表达式必须匹配整个输入,您需要用 .* 包裹模式,类似于 (?s).*(<YOUR PATTERN>).*.

使用

(?s).*\b(delete|exec|drop\s+table|insert|shutdown|update|or)\b.*

详情

  • (?s) - 打开 DOTALL 模式,其中 . 匹配任何字符
  • .* - 任何 0+ 个字符,尽可能多
  • \b(delete|exec|drop\s+table|insert|shutdown|update|or)\b - 组
  • 中的任何一个完整单词(注意\b是单词边界结构)
  • .* - 任何 0+ 个字符,尽可能多

我还用 drop\s+table 替换了 drop\s*table 因为我猜 droptable 不是预期的。