Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使regex的一部分成为可选的?_Regex - Fatal编程技术网

如何使regex的一部分成为可选的?

如何使regex的一部分成为可选的?,regex,Regex,假设我有下面的正则表达式,它匹配一个结尾带有分号的字符串: \".+\"; 它将匹配除空字符串以外的任何字符串,如下所示: ""; 我试着用这个: \".+?\"; 但那没用 我的问题是,如何将+部分设置为可选,以便用户不必在字符串中输入任何字符?要将+设置为可选,可以执行以下操作: \"(?:.+)?\"; \".*?\"; (?:…)称为。它只执行匹配操作,不会捕获任何内容。在非捕获组之后添加?,使整个非捕获组成为可选的 或者,您可以执行以下操作: \"(?:.+)?\"; \"

假设我有下面的正则表达式,它匹配一个结尾带有分号的字符串:

\".+\";
它将匹配除空字符串以外的任何字符串,如下所示:

"";
我试着用这个:

\".+?\";
但那没用


我的问题是,如何将
+
部分设置为可选,以便用户不必在字符串中输入任何字符?

要将
+
设置为可选,可以执行以下操作:

\"(?:.+)?\";
\".*?\";
(?:…)
称为。它只执行匹配操作,不会捕获任何内容。在非捕获组之后添加
,使整个非捕获组成为可选的

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

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

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

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

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

也许值得一提的是,小组中的
?:
是为了什么,以及为什么它可能(或可能不)是必要的。