正则表达式是什么意思: (.+?)
解决方案 »
- 登录后跳转到登录前的页面应该怎么做啊?
- Servlet验证出现405错误,HTTP method POST is not supported by this URL
- hibernate fectch = FetchType.LAZY 怎么理解
- 这个错误是什么意思????急急!!!
- javabean
- 求一个算法,要求高效
- 一个小小的关于关闭窗口的问题
- GenericServlet的getInitParameter()这个method的一点疑问
- 请各位兄弟看一下我这个代码错在哪
- JSP 里面 怎么取得用户 的IP地址???有没有什么函数可以做到?
- java.lang.ClassNotFoundException
- 寻JAVA WEB开发高手,帮解决一个问题,详看描述
+代表前面的部分出现1到多次
*代表前面的部分出现0到多次
?代表前面的部分出现1到多次(这个不是+?的?)X+,X*,X?称之为贪婪(Greedy)匹配,只要符合条件,可以一直匹配到最后X+?,X*?,X??称之为勉强(Reluctant)匹配,匹配第一个符合条件的,就终止
比如:
System.out.println("abc".replaceAll(".+", "X"));
System.out.println("abc".replaceFirst(".+", "X"));
System.out.println("abc".replaceAll(".+?", "X"));
System.out.println("abc".replaceFirst(".+?", "X"));
输出
X // 从a开始,a符合.+,ab符合,abc还符合,所以.+直接对应abc
X // 同上
XXX // a符合.+,就终止,然后由于replaceAll的需要,继续从b开始查找替换,共3个符合条件
Xbc // a符合.+,就终止,然后由于replaceFirst,运行终止,只替换第一个
1 类似数学运算的括号(这个建议用非捕获的(?:X)来替代)
2 可以使用编号在正则表达式中,引用
比如 System.out.println("abc".replaceAll("(.+?)", "__$1__")); //__a____b____c__又比如,\1是反向引用,指前面的标签中的标签名 System.out.println("<b>test</b>".matches("<(\\w+).*?>.*?</\\1>")); // T
System.out.println("<b>test</x>".matches("<(\\w+).*?>.*?</\\1>")); // F
System.out.println("<a href='test.html'>test</a>".matches("<(\\w+).*?>.*?</\\1>")); // T
System.out.println("<a href='test.html'>test</x>".matches("<(\\w+).*?>.*?</\\1>")); // F