正则表达式中 (.*?) 和 (.*)? 有什么区别?

正则表达式中 (.*?) 和 (.*)? 有什么区别?

(.*?)对于正则表达式,和有什么区别(.*)?

答案1

我使用了正则表达式测试器regex101.com(无关联)来测试这些。

(.*?)匹配任意字符 ( .) 任意次 ( *),尽可能少的次数使正则表达式匹配 ( ?)。您会在任何字符串上获得匹配,但由于问号的存在,您只能捕获空白字符串。当您有更复杂的正则表达式时,此功能更有用。在这里,解析器不必捕获任何内容即可获得匹配:星号允许捕获组中有任意数量的字符,而问号使解析器从输入文本中保存尽可能多的字符以供以后使用,从而导致不捕获任何内容。

(.*)?捕获一个组零次或一次 ( ?)。该组由任意长度 ( *) 的任意字符 ( .) 组成。这也会匹配任何内容,但它会捕获第一行,因为点匹配除换行符之外的任何内容。

答案2

(.*)?举例说明和之间的(.*?)一点区别:

首先是什么.*

.*表示任意数量的任意类型字符(点),也可以是 0,即没有字符也是可能的。

(.*)?

您可以将其视为捕获位于某个文本中间的变量文本的东西:

例如,有一个程序可以检查日志消息以查看其中是否有特定内容(失败2ban)。

failregex = ^[Ll]ogin attempt for nonexistent user ('.*')? from 192.168.1.20

此时捕获用户名例如。

如果你看看regex101.com通过以下示例也许这一点会变得更加清楚:

没有什么 无2 合身

因为?在这一点上所谓的贪婪的它会捕获尽可能多的信息 - 换句话说:如果之前有inbetween多个分割,那么最后的分割就是最后一个。inbetween

多重分割

(.*?)

?使得不贪婪. 意思是如果你有类似

WORD1 bla2 WORD2 bla3 WORD2

WORD1(.*?)WORD2只到第一个WORD2

不贪婪

WORD1(.*)WORD2贪婪则一直持续到最后一次出现WORD2

贪婪的

相关内容