正则表达式问号

Dev*_*555 3 javascript php regex

要匹配字符串,例如:

-TEXT-someMore-String
Run Code Online (Sandbox Code Playgroud)

为了得到-TEXT-,我开始知道这是有效的:

/-(.+?)-/ // -TEXT-
Run Code Online (Sandbox Code Playgroud)

据我所知,?将前面的标记作为可选项,如:

colou?r匹配colourcolor

我最初使用正则表达式来获得这样的-TEXT-部分:

/-(.+)-/
Run Code Online (Sandbox Code Playgroud)

但它给了-TEXT-someMore-.

添加如何?阻止正则表达式-TEXT-正确获取部分?因为它曾经使前面的令牌可选择不在某些点停止,如上例所示?

rua*_*akh 9

正如你所说,?有时意味着"零或一",但在你的正则表达式+?是一个单位意味着"一个或多个 - 并且最好尽可能少".(这与裸露相反+,这意味着"一个或多个 - 并且最好尽可能多".)

正如文档所说:

但是,如果量词后跟一个问号,那么它就变得很懒惰,而是匹配可能的最小次数,因此该模式/\*.*?\*/ 使用C注释做正确的事情.各种量词的含义不会改变,只是匹配的首选数量.不要混淆这种问号的使用与其本身作为量词的用途.因为它有两个用途,它有时会出现加倍,因为\d??\d它按优先级匹配一个数字,但如果这是模式其余部分匹配的唯一方式,则可以匹配两个.

  • 是.`+`和`*`被称为"贪婪"的操作符:它们消耗尽可能多的东西.相比之下,`+?`和`*?`是"非贪婪"的版本:它们消耗尽可能少的消耗.在网上搜索"regex greedy nongreedy"获取更多信息/教程. (6认同)