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.*