32

我已经明白这.*意味着零个或多个任何字符,但是有人可以解释一下.*接下来的工作如何以及它会匹配什么吗?

.*([a-m/]*).*

.*([a-m/]+).*

.*?([a-m/]*).*
4

4 回答 4

24

点表示任何东西都可以放在这里,星号表示至少 0 次,因此.*接受任何字符序列,包括空字符串。

于 2012-10-01T02:07:58.430 回答
15

每种情况都不同:

.*([a-m\/]*).*

第一个.*可能会匹配整个字符串,因为[a-m/]不需要存在,第一个*是贪婪的并且首先出现。

.*([a-m\/]+).*

第一个.*将匹配整个字符串,直到匹配的最后一个字符,[a-m/]因为只需要一个,第一个*是贪婪的并且首先出现。

.*?([a-m\/]*).*

第一个.*?将匹配字符串直到匹配的第一个字符[a-m/],因为*?不是贪婪的,然后[a-m/]*将匹配所有可以匹配的,因为*是贪婪的,然后最后一个.*将匹配字符串的其余部分。

于 2012-10-01T02:27:59.750 回答
12

.* 在您的示例中的功能是确保包含表达式可以被任何东西(或什么都没有)包围。点表示任意字符,星号表示之前的字符可以重复任意次数(或根本不重复)。

于 2012-10-01T02:11:48.080 回答
10

.* 表示“任何字符,任何重复次数”。

于 2012-10-01T02:10:40.890 回答