URL正则校验Java代码出现两处语法错误,请求解析原因
解析Java URL正则校验代码的编译错误
我来帮你逐个拆解这两个编译错误的原因,以及对应的修复方案:
第一个错误:行3提示 ';' expected
问题出在Pattern.compile的调用语句末尾——你多写了一个闭合双引号和右括号!
原代码里的这部分:
Pattern p = Pattern.compile("^(http://|https://)?(www.)([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?$")");
末尾的")");是错误的,正则表达式字符串已经用前一个双引号闭合了,额外的")属于多余的语法符号,导致Java编译器无法识别正确的语句结尾,所以抛出了缺少分号的错误。
另外顺便提个小细节:正则里的.是通配符,如果你想匹配实际的点号,需要用\\.转义,不然你的正则会错误匹配到其他字符,修复后这行应该是:
Pattern p = Pattern.compile("^(http://|https://)?(www\\.)([a-zA-Z0-9]+)\\.[a-zA-Z0-9]*\\.[a-z]{3}\\.?([a-z]+)?$");
第二个错误:行5提示 ')' expected
调用matcher()方法时,传入的URL没有用双引号包裹!
Java里字符串必须用双引号括起来,你直接写https://test.com:8080/wh-101的话,编译器会把它当成一堆非法的标识符和特殊符号(比如冒号、斜杠都是Java语法里的特殊字符),根本无法识别这是一个方法参数,所以提示缺少右括号来闭合matcher()的调用。
修复后这行应该是:
m = p.matcher("https://test.com:8080/wh-101");
修复后的完整代码
import java.util.regex.Pattern; import java.util.regex.Matcher; class Testimmutablestring1{ public static void main(String[] args ) { Pattern p = Pattern.compile("^(http://|https://)?(www\\.)([a-zA-Z0-9]+)\\.[a-zA-Z0-9]*\\.[a-z]{3}\\.?([a-z]+)?$"); Matcher m; m = p.matcher("https://test.com:8080/wh-101"); } }
(补充:别忘了导入Pattern和Matcher类,不然也会触发新的编译报错哦)
内容的提问来源于stack exchange,提问作者Meenakshi
相关产品推荐
相关产品推荐

