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

Eth*_*ein 4 regex

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

\".+\";
Run Code Online (Sandbox Code Playgroud)

它会匹配除空字符串以外的任何字符串,例如以下字符串:

"";
Run Code Online (Sandbox Code Playgroud)

我尝试使用此:

\".+?\";
Run Code Online (Sandbox Code Playgroud)

但这没有用。

我的问题是,如何使.+部分成为可选部分,以便用户不必在字符串中放入任何字符?

Avi*_*Raj 9

要使之成为.+可选,您可以执行以下操作:

\"(?:.+)?\";
Run Code Online (Sandbox Code Playgroud)

(?:..)被称为非捕获组。它仅执行匹配操作,不会捕获任何内容。?在非捕获组之后添加使得整个非捕获组都是可选的。

或者,您可以执行以下操作:

\".*?\";
Run Code Online (Sandbox Code Playgroud)

.*会与任何字符零次或多次匹配。加力?后,*正则表达式引擎将进行最短的匹配。

  • 也许值得一提的是组中的`?:` 是干什么用的,以及为什么它可能(或可能不是)是必要的。 (2认同)