如何使regex的一部分成为可选的?
假设我有下面的正则表达式,它匹配一个结尾带有分号的字符串:如何使regex的一部分成为可选的?,regex,Regex,假设我有下面的正则表达式,它匹配一个结尾带有分号的字符串: \".+\"; 它将匹配除空字符串以外的任何字符串,如下所示: ""; 我试着用这个: \".+?\"; 但那没用 我的问题是,如何将+部分设置为可选,以便用户不必在字符串中输入任何字符?要将+设置为可选,可以执行以下操作: \"(?:.+)?\"; \".*?\"; (?:…)称为。它只执行匹配操作,不会捕获任何内容。在非捕获组之后添加?,使整个非捕获组成为可选的 或者,您可以执行以下操作: \"(?:.+)?\"; \"
\".+\";
它将匹配除空字符串以外的任何字符串,如下所示:
"";
我试着用这个:
\".+?\";
但那没用
我的问题是,如何将
+
部分设置为可选,以便用户不必在字符串中输入任何字符?要将+
设置为可选,可以执行以下操作:
\"(?:.+)?\";
\".*?\";
(?:…)
称为。它只执行匹配操作,不会捕获任何内容。在非捕获组之后添加?
,使整个非捕获组成为可选的
或者,您可以执行以下操作:
\"(?:.+)?\";
\".*?\";
*
将贪婪地匹配任何字符零次或多次。在*
之后添加?
将强制正则表达式引擎进行尽可能短的匹配。这里是用于密码的正则表达式,它至少需要8个字符,包括数字、大小写字母和可选的独立字符
/((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?![~@#\$%\^&\*_\-\+=`|{}:;!\.\?\"()\[\]]).{8,25})/
也许值得一提的是,小组中的
?:
是为了什么,以及为什么它可能(或可能不)是必要的。