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

时间:2014-10-02 12:55:56

标签: regex

假设我有以下正则表达式,最后匹配一个带分号的字符串:

\".+\";

它将匹配除空字符串之外的任何字符串,如下所示:

"";

我试过用这个:

\".+?\";

但那没用。

我的问题是,我如何制作可选的.+部分,以便用户不必在字符串中添加任何字符?

2 个答案:

答案 0 :(得分:5)

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

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

(?:..)被称为non-capturing group。它只进行匹配操作,不会捕获任何东西。在非捕获组之后添加?使整个非捕获组可选。

或者,您可以这样做:

\".*?\";

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

答案 1 :(得分:0)

这里是密码的正则表达式,至少需要 8 个字符,包括数字、大小写字母和可选的特殊字符

/((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?![~@#\$%\^&\*_\-\+=`|{}:;!\.\?\"()\[\]]).{8,25})/