当前位置: 首页 > 面试题库 >

“ Greedy”和“ Reluctant”正则表达式量词有什么区别?

姬捷
2023-03-14
问题内容

Patternjavadocs:

贪婪的量词:
X?X,一次或根本不  
X * X,零次或多次  
X + X,一次或多次  
X {n} X,正好n次  
X {n,} X,至少n次  
X {n,m} X,至少n次但不超过m次

勉强的量词:
X??X,一次或根本不  
X*?X,零次或多次  
X +?X,一次或多次  
X {n}?X,正好n次  
X {n,}?X,至少n次  
X {n,m}?X,至少n次但不超过m次

他们所做的描述是相同的…所以有什么区别?

我真的很感谢一些例子。

我正在用Java进行编码,但是我听到对于大多数现代正则表达式实现来说,这个概念是相同的。


问题答案:

贪婪的运算符总是尝试“抓住”尽可能多的输入,而勉强的量词将匹配尽可能少的输入并仍会创建匹配项。

例:

"The red fox jumped over the red fence"
/(.*)red/ => \1 = "The red fox jumped over the "
/(.*?)red/ => \1 = "The "

"aaa"
/a?a*/ => \1 = "a", \2 = "aa"
/a??a*/ => \1 = "", \2 = "aaa"

"Mr. Doe, John"
/^(?:Mrs?.)?.*\b(.*)$/ => \1 = "John"
/^(?:Mrs?.)?.*?\b(.*)$/ => \1 = "Doe, John"


 类似资料:
  • 问题内容: Python和JavaScript正则表达式语法是否相同? 如果不是,则: 它们之间的重要区别是什么 是否有一个“实现” JavaScript正则表达式的python库? 问题答案: 这里有一个比较表: 正则表达式风味比较

  • 问题内容: 我有一个像 我需要一个正则表达式给我以下输出: 我努力了 但这给 问题答案: 因此,您想要(+一个整数)后跟任何内容,直到下一个(或字符串结尾),对吗? 然后,您需要告诉正则表达式引擎: 在您的正则表达式中,尽可能匹配-直到字符串结尾的所有内容。另外,您将比赛的第二部分本身做了。 我的解决方案说明:

  • 本文向大家介绍所有格量词Java正则表达式,包括了所有格量词Java正则表达式的使用技巧和注意事项,需要的朋友参考一下 贪婪的量词是默认的量词。贪婪的量词从输入字符串中尽可能匹配(最长匹配),如果未发生匹配,则它离开最后一个字符并再次匹配。 所有格量词与贪婪量词相似,唯一的区别是它试图匹配最初可能匹配的尽可能多的字符,并且,如果不像贪婪量词那样发生匹配,它就不会回退。 如果将“ +”放在贪婪的量词

  • 本文向大家介绍勉强量词Java正则表达式,包括了勉强量词Java正则表达式的使用技巧和注意事项,需要的朋友参考一下 贪婪的量词是默认的量词。贪婪的量词从输入字符串中尽可能匹配(最长匹配),如果未发生匹配,则它离开最后一个字符并再次匹配。 勉强的或非贪婪的量词匹配尽可能少,但如果未发生匹配,则最初的非贪婪的量词将匹配第一个字符,它会从输入字符串中添加另一个字符并尝试进行匹配。 如果您放置“?” 在贪

  • 问题内容: 我问这个问题有点傻,但是从我读过的所有内容来看,这应该有效,但对我而言却无效。我只是想使用正则表达式匹配字符串中的整个单词。 因此,如果我试图在句子中找到单词“ the”,则对于“褐狐快速越过懒狗”应该返回true,而对于“褐狐快速越过懒狗”则返回false。 。 我已经试过了: 我也尝试过: 我也尝试过此正则表达式:“ \ bthe \ b” 而且它们总是返回false。我觉得我在这

  • 我正在尝试使用扩展正则表达式(例如使用 )匹配 和 之间的内容。 考虑两个示例字符串和,我尝试了以下正则表达式 但它匹配两个示例的整个字符串(贪婪)。 谁能解释一下正则表达式引擎在这种情况下是如何工作的,以及我应该如何更改我的正则表达式以使其正常工作。