如何使正则表达式的一部分变为可选项?

38

假设我有以下正则表达式,它可以匹配以分号结尾的字符串:

\".+\";

它将匹配除空字符串外的任何字符串,比如下面这个:

"";

我尝试使用了这个:

\".+?\";

但那行不通。

我的问题是,如何使.+部分是可选的,这样用户就不必在字符串中添加任何字符了?

2个回答

56

为了使.+成为可选项,你可以这样做:

要使.+变成可选项,你可以这样做:

\"(?:.+)?\";

(?:..) 被称为 非捕获组。它仅执行匹配操作,不会捕获任何内容。在非捕获组后加上 ?,就可以使整个非捕获组变成可选项。

或者您也可以这样写:

\".*?\";

.*会贪婪地匹配零个或多个字符。在*后面添加?会强制正则表达式引擎执行最短可能的匹配。


3
或许值得提一下这个组中的 ?: 是什么,以及为什么它可能(或不可能)是必要的。 - Tom Fenech

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接