-1
我有2个不同的字符串像正则表达式匹配的错误表达
abs1.qwerty.com:1234
和
abs11qwerty.com:1234
使用这样的正则表达式"(?=" + name + ").*?:(\\d+)"
,其中名称是给定的字符串之后。我收到错误的匹配,因为它假定它们是相同的。什么可以解决这个问题?
我有2个不同的字符串像正则表达式匹配的错误表达
abs1.qwerty.com:1234
和
abs11qwerty.com:1234
使用这样的正则表达式"(?=" + name + ").*?:(\\d+)"
,其中名称是给定的字符串之后。我收到错误的匹配,因为它假定它们是相同的。什么可以解决这个问题?
你需要正则表达式转义name
- 这是经典的注入攻击。
如果name
有正则表达式的字符在它的引擎将它们解释它们作为模式的一部分,例如
name = ".*"
很可能会匹配所有的名称,允许攻击者从系统中提取数据。
使用类似以下内容:
final String pattern = String.format("(?=%s).*?:(\\d+)", Pattern.quote(name))
在你的榜样,如果模式abs1.qwerty.com
正则表达式引擎解释是这样的:
因此模式匹配愉快 “abs11qwerty.com”。
1)格式化您的代码。 2)提供示例输入和预期输出。 3)提供实际产出。 –