正则表达式匹配错误的表达

时间:2016-08-01 07:50:54

标签: java regex

我有两个不同的字符串,如

abs1.qwerty.com:1234

abs11qwerty.com:1234

使用此类正则表达式 "(?=" + name + ").*?:(\\d+)" 后,其中name是给定字符串。我收到错误的匹配,因为它假设它们是相同的。什么可以解决这个问题?

1 个答案:

答案 0 :(得分:2)

你需要regex escape name - 这是经典的注入攻击

如果name中包含正则表达式字符,引擎会将它们解释为模式的一部分,例如

name = ".*"

可能会匹配所有名称,允许攻击者从系统中提取数据。

使用以下内容:

final String pattern = String.format("(?=%s).*?:(\\d+)", Pattern.quote(name))

在您的示例中,如果模式为abs1.qwerty.com,则正则表达式引擎解释为:

  • “abs1” - 文字
  • “”。 - 任何角色,一旦
  • “qwerty” - 文字
  • “”。 - 任何角色,一旦
  • “com” - 字面意思

所以模式很愉快地匹配“abs11qwerty.com”。