java pattern 正则表达式中的 '+?' 和 '*?' 分别是什么意思

我知道
+ 表示 1个到多个
* 表示 0到多个
? 表示0或者1个

但经常看到 +? *? 这么用,比如:

查询
<a
href=\"index.html\">index</a>中
<a
href></a>间的数据,
可写作<a.*href=\".*\">(.+?)</a>

这里小括号提取的内容数量就是用 +? 表示的
这个是什么意思啊, 用 (.+) 匹配 index 难道不能匹配么,只能用 (.+?) 么?

  + 表示 1个到多个
  * 表示 0到多个
  ? 表示0或者1个

  *?和+?叫做非贪婪匹配

  +和*表示尽可能多的匹配
  +?和*? 表示尽可能少的匹配

  任意字符的范围,如果要匹配带有连续文本,贪婪匹配会使得中间的内容尽可能长,也就是第一个标签的开头和最后一个标签结尾整个作为一个结果返回。
  如果是非贪婪的,就会把每一个标签作为单独一个结果返回。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-12-06
普通的+,*表示 尽可能多的匹配

+?,*?多了个问号表示 尽可能 少的匹配

你举的那个例子无论 用什么 结果都 是一样的,假如有以下一行
<a href=\"index.html\">index</a><a href=\"chapter1.html\">chapter1</a>
如果 用<a.*href=\".*\">(.+?)</a>小括号会匹配第二个a href标签里的chapter1
因为a.*href中.*会一直匹配 到 第二个href前面
如果 用<a.*?href=\".*\">(.+)</a>小括号则会匹配 从index到chapter1的所有字符 ,即(.+)从第一个<a href ...>结束 匹配 到 在同一行的最后 一个</a>前面本回答被提问者采纳

正则表达式.+?是否包含换行符
其实.+?是既可以区配换行符也可以不区配换行符的。这个和你是启用单行模式还是启用多行模式有关。正则表达式对象模式仅有如下三种:g (全文查找出现的所有 pattern)i (忽略大小写)m (多行查找)1.单行模式(单行模式允许小数点(.)匹配包括换行符(\\n)在内的任意字符)开启单行模式:.可以匹配任...

java中正则表达式的问题 零宽断言的
split方法虽然是用正则表达式实现的,但不能这么用。另外这个零宽断言有问题,我改了一下,不知道是不是你想要的。程序如下:Pattern pattern = Pattern.compile("(?<=0x)\\\\d+|(?<=0X)\\\\d+");Matcher matcher = pattern.matcher(x);while (matcher.find()) {System.err.println(matcher.group...

java中pattern是什么意思?
在Java中,Pattern是正则表达式的一个抽象表示,它提供了用于执行正则表达式匹配操作的方法。正则表达式(Regular Expression)是一种强大的文本处理工具,它允许用户通过一种描述性的模式来匹配、查找、替换文本中的字符序列。在Java中,正则表达式主要用于文本匹配、文本替换、文本分割等操作。Pattern类位于java....

js正则表达式中的问号几种用法
在表示重复的字符后面加问号,比如+?,*?,{2,3}?可以停止匹配的贪婪模式。var pattern=\/\\w{2,3}\/;console.log("aaaa".match(pattern)[0]);\/*结果"aaa";贪婪模式下会尽可能多的匹配,所以会匹配3个重复的字符 \/ var pattern2=\/\\w{2,3}?\/;console.log("aaaa".match(pattern2)[0]);\/...

java中pattern是什么意思?
java 中pattern为正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。例子如下:Pattern p = Pattern....

java中pattern是什么意思?
Java中的Pattern是指正则表达式模式。Pattern是Java正则表达式的核心概念之一。在Java编程中,Pattern类用于表示一个正则表达式,它提供了一种强大的文本处理机制,允许开发者匹配、查找、替换和分割字符串。具体解释如下:Pattern的解释:1. 正则表达式的概念:正则表达式是一个强大的工具,用于处理字符串。它...

java中pattern是什
在Java编程中,Pattern扮演着正则表达式编译的关键角色。它是一个类的实例,用于将给定的字符串形式的正则表达式转换为可执行的形式。要实现这一功能,首先需要将正则表达式字符串编译为Pattern对象。例如,如下的代码片段展示了这一过程:Pattern对象的创建是通过Pattern.compile("a*b")方法进行,它将字符串...

正则表达式中 [\\w-]和\\. 是什么意思?
.*? 是懒惰匹配,一旦匹配到第一个就不往下走了。(至于什么叫懒惰匹配 自己去百度。).*+是无限匹配直到最后一个。

怎么识别特殊符号?
- ?:匹配前面的字符零次或一次。- []:匹配方括号中的任何一个字符。- ():将括号内的表达式分组。例如,如果您想匹配所有以“#”开头的行,您可以使用以下正则表达式:import re text = "# This is a comment\\nHello, world!\\n# Another comment"pattern = r"^#.*$"matches = re.find...

Java Pattern和Matcher处理正则表达式的用法
本文旨在深入探讨Java Pattern与Matcher在处理正则表达式时的具体应用及特性。首先,Pattern与Matcher的协作是处理正则表达式的关键。Matcher类不仅提供了对正则表达式的分组支持,还支持对表达式的多次匹配,相较于仅能进行基础简单匹配的Pattern类,Matcher的使用更为灵活高效。Pattern类通过构造方法private Pattern(...

相似回答