我已经明白这.*
意味着零个或多个任何字符,但是有人可以解释一下.*
接下来的工作如何以及它会匹配什么吗?
.*([a-m/]*).*
.*([a-m/]+).*
.*?([a-m/]*).*
我已经明白这.*
意味着零个或多个任何字符,但是有人可以解释一下.*
接下来的工作如何以及它会匹配什么吗?
.*([a-m/]*).*
.*([a-m/]+).*
.*?([a-m/]*).*
点表示任何东西都可以放在这里,星号表示至少 0 次,因此.*
接受任何字符序列,包括空字符串。
每种情况都不同:
.*([a-m\/]*).*
第一个.*
可能会匹配整个字符串,因为[a-m/]
不需要存在,第一个*
是贪婪的并且首先出现。
.*([a-m\/]+).*
第一个.*
将匹配整个字符串,直到匹配的最后一个字符,[a-m/]
因为只需要一个,第一个*
是贪婪的并且首先出现。
.*?([a-m\/]*).*
第一个.*?
将匹配字符串直到匹配的第一个字符[a-m/]
,因为*?
不是贪婪的,然后[a-m/]*
将匹配所有可以匹配的,因为*
是贪婪的,然后最后一个.*
将匹配字符串的其余部分。
.* 在您的示例中的功能是确保包含表达式可以被任何东西(或什么都没有)包围。点表示任意字符,星号表示之前的字符可以重复任意次数(或根本不重复)。
.* 表示“任何字符,任何重复次数”。