如何在java中使用正则表达式来使它们正常工作?

时间:2014-12-29 01:28:24

标签: java android regex

其实我不是正则表达式的专家,我总是复制并粘贴它们...现在我正在完成一个Android应用程序,我需要检查来自autocompleteTextView的输入字符串是否匹配多个和最常见的已知形式的url,所以我发现了这个正则表达式:

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

,就像这样逃避之后:

/^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$/ 

没有正常工作......我逃避错了,还是别的?

1 个答案:

答案 0 :(得分:0)

你的正则表达式看起来像是为JavaScript编写的。由于Java不支持正则表达式文字(例如/regex/),因此您必须将其编写为Java字符串文字。你已经完成了双重逃脱的中途;现在你需要用引号替换正则表达式分隔符:

"^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$"

这应该可以正常工作,但不需要许多逃脱。具体来说,斜杠(/)并不特别,因为您不再使用它们作为分隔符,并且当它在字符类中时它不是特殊的(即在方括号内)。这是整理版本:

"^(https?://)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*/?$"

请注意,我只是在谈论你的正则表达式的语法,而不是它的正确性。使用正则表达式验证网址已成为许多激烈讨论的主题,我不想再开始另一个。