java正则表达式的一个问题(?:),高手来解答一下 System.out.println("a.cgiadfasd.cgi?iii".replaceAll("\\.cgi(?:\\?)|\\.cgi$", ".jsp"));//结果a.cgiadfasd.jspiiiSystem.out.println("a.cgiadfasd.cgi".replaceAll("\\.cgi(?:\\?)|\\.cgi$", ".jsp"));//结果a.cgiadfasd.jsp但我第一句的期望是a.cgiadfasd.jsp?iii 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 System.out.println("a.cgiadfasd.cgi?iii".replaceAll("\\.cgi(?:)|\\.cgi$", ".jsp"));//结果a.jspadfasd.jsp?iii System.out.println("a.cgiadfasd.cgi?iii".replaceAll("\\.cgi(?:)|\\.cgi$", ".jsp"));//结果a.jspadfasd.jsp?iii (?:expression) 是非捕获组,匹配的内容虽然不捕获到组中,但还是要计入最终的匹配结果的,你要的应该是顺序环视System.out.println("a.cgiadfasd.cgi?iii".replaceAll("\\.cgi(?=\\?)|\\.cgi$", ".jsp"));其实完全没必要搞那么烦,这样写就行了System.out.println("a.cgiadfasd.cgi?iii".replaceAll("\\.cgi(?=\\?|$)", ".jsp")); 实在不好意思,你输出的结果把第一个.cgi也给替换了,不是我想要的结果,但还是感谢你的参与另外能否解释一下只写(?:)的意思?好像我不太明白呢 大神们 帮帮忙 关于nutch 菜鸟求助!! SSH 项目配置出错 请教一个WEB的问题(可能用JAVA写的) hibernate Set 查询问题 急!!! Cxf支持SOAP消息监控吗??? 请教jsp和servlet之间值的传递问题 提取html中的一部分文字信息 关于 classpath 和 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 问题求解 struct1.1 的 message resources 如何 解决 中文问题 闲的蛋疼,没事问个面试题 jsp 传值
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货