-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)提供實際產出。 –