2016-08-01 66 views
-1

我有2个不同的字符串像正则表达式匹配的错误表达

abs1.qwerty.com:1234 

abs11qwerty.com:1234 

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

+2

1)格式化您的代码。 2)提供示例输入和预期输出。 3)提供实际产出。 –

回答

2

你需要正则表达式转义name - 这是经典的注入攻击

如果name有正则表达式的字符在它的引擎将它们解释它们作为模式的一部分,例如

name = ".*" 

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

使用类似以下内容:

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

在你的榜样,如果模式abs1.qwerty.com正则表达式引擎解释是这样的:

  • “ABS1” - 字面
  • “” - 任何字符,一次
  • “qwerty” - 字面值
  • “。” - 任何字符,一旦
  • “COM” - 字面

因此模式匹配愉快 “abs11qwerty.com”。