其实我不是正则表达式的专家,我总是复制并粘贴它们...现在我正在完成一个Android应用程序,我需要检查来自autocompleteTextView的输入字符串是否匹配多个和最常见的已知形式的url,所以我发现了这个正则表达式:
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
,就像这样逃避之后:
/^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$/
没有正常工作......我逃避错了,还是别的?
答案 0 :(得分:0)
你的正则表达式看起来像是为JavaScript编写的。由于Java不支持正则表达式文字(例如/regex/
),因此您必须将其编写为Java字符串文字。你已经完成了双重逃脱的中途;现在你需要用引号替换正则表达式分隔符:
"^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$"
这应该可以正常工作,但不需要许多逃脱。具体来说,斜杠(/
)并不特别,因为您不再使用它们作为分隔符,并且当它在字符类中时它不是特殊的(即在方括号内)。这是整理版本:
"^(https?://)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*/?$"
请注意,我只是在谈论你的正则表达式的语法,而不是它的正确性。使用正则表达式验证网址已成为许多激烈讨论的主题,我不想再开始另一个。