我有两个不同的字符串,如
abs1.qwerty.com:1234
和
abs11qwerty.com:1234
使用此类正则表达式 "(?=" + name + ").*?:(\\d+)"
后,其中name是给定字符串。我收到错误的匹配,因为它假设它们是相同的。什么可以解决这个问题?
答案 0 :(得分:2)
你需要regex escape name
- 这是经典的注入攻击。
如果name
中包含正则表达式字符,引擎会将它们解释为模式的一部分,例如
name = ".*"
可能会匹配所有名称,允许攻击者从系统中提取数据。
使用以下内容:
final String pattern = String.format("(?=%s).*?:(\\d+)", Pattern.quote(name))
在您的示例中,如果模式为abs1.qwerty.com
,则正则表达式引擎解释为:
所以模式很愉快地匹配“abs11qwerty.com”。