Regex 关于正则表达式模式的混淆

Regex 关于正则表达式模式的混淆,regex,regex-lookarounds,regex-negation,Regex,Regex Lookarounds,Regex Negation,我试着写一个正则表达式来捕捉句子中的某些单词,但它不起作用。下面的正则表达式只有在我给出精确匹配时才起作用 [\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b)) 假设我发送一个HTTP头-headerName=insert它可以工作 但当我给出headerName=awesome插入号码时,该选项不起作用 --编辑-- @user1180,是的,我可以使用准备好的语句,但我们也在研究正则表达式部分

我试着写一个正则表达式来捕捉句子中的某些单词,但它不起作用。下面的正则表达式只有在我给出精确匹配时才起作用

[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))
假设我发送一个HTTP头-
headerName=insert
它可以工作

但当我给出
headerName=awesome插入号码时,该选项不起作用

--编辑--

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

@Marcel和Wiktor,是的,它在那个网站上工作。我猜我的工具无法识别正则表达式。我使用的是Mulesoft ESB,当计算值符合给定的正则表达式(regex)时,它使用
匹配,特别是Java支持的regex“风格”。

它是用这样的东西,
匹配/\+(\d+)\s\(\d+)\s(\d+-\d+)/
,我不知道如何用这个正则表达式格式编写用例


我的用例是太捕获SQL注入模式,它将检查请求头/queryparam中的
删除(exec)(drop\s*table)(insert)(shutdown)(update)或
参数。

因为您的正则表达式必须匹配整个输入,所以您需要用
*
包装该模式,类似于
(?)*()*

使用

详细信息

  • (?s)
    -在
    匹配任何字符的情况下打开点调用模式
  • *
    -任何0+字符,尽可能多
  • \b(删除| exec | drop\s+表格|插入|关机|更新|或)\b
    -组中所有单词中的任何一个(注意
    \b
    是单词边界结构)
  • *
    -任何0+字符,尽可能多

我还用
drop\s+table
替换了
drop\s*table
,因为我猜
droptable
是不应该出现的。

您想要匹配的单词/术语的完整列表是什么?对我来说确实有用。看这个,这些看起来像SQL语句。你想阻止注射吗?如果是这样的话,通常最好使用预先准备好的语句。因此,您只需要用
(?s)。*().*
来包装模式。请尝试
(?s)。*\b(删除|执行|删除\s+表格|插入|关闭|更新|或)\b.*
谢谢,否则它会工作。请保留它作为答案,我会接受的。顺便问一下,你有没有推荐一些材料/网站来作为新手学习regex?谢谢你提供的详细信息。顺便说一句,对于不区分大小写的匹配,应该向上面的正则表达式中添加什么?我希望它能起作用。*\b(?i)(删除| exec | drop\s+table | insert | shutdown | update |或)\b.
@johnsen
(?si)。*\b(删除| exec | drop\s+table | insert | shutdown | update或)\b.
(?s).*\b(delete|exec|drop\s+table|insert|shutdown|update|or)\b.*