Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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/8/perl/11.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,将正则表达式的一部分放在()中(括号)和放在[](方括号)中有什么区别 这是如何做到的: [a-z0-9] 与此不同: (a-z0-9) ?(…)是一种对内容进行分组的方法,如数学(a-z0-9)是a-z0-9的分组顺序。组特别用于允许前面的表达式作为一个整体重复的组:a*b*匹配任意数量的a,后跟任意数量的b,例如a,aaab,bbbbb,等等。;与此相反,(ab)*匹配任意数量的ab,例如ab,abababab,等等 […]是一个描述单个字符选项的[a-z0-9]描述了一个单个字符,其范

将正则表达式的一部分放在()中(括号)和放在[](方括号)中有什么区别

这是如何做到的:

[a-z0-9]
与此不同:

(a-z0-9)

(…)
是一种对内容进行分组的方法,如数学<代码>(a-z0-9)是
a-z0-9
的分组顺序。组特别用于允许前面的表达式作为一个整体重复的组:
a*b*
匹配任意数量的
a
,后跟任意数量的
b
,例如
a
aaab
bbbbb
,等等。;与此相反,
(ab)*
匹配任意数量的
ab
,例如
ab
abababab
,等等


[…]
是一个描述单个字符选项的
[a-z0-9]
描述了一个单个字符,其范围可以是
a
-
z
0
-
9

正则表达式中的
[]
结构基本上是所有内容上的
的简写。例如,
[abc]
匹配a、b或c。此外,
-
字符在
[]
中具有特殊含义。它提供了一个范围构造。正则表达式
[a-z]
将匹配任何字母a到z


()
构造是建立优先顺序的分组构造(它对访问匹配的子字符串也有影响,但这是一个更高级的主题)。regex
(abc)
将与字符串“abc”匹配

[]
表示字符类<代码>()
表示捕获组

[a-z0-9]
--一个字符,其范围在
a-z
0-9

(a-z0-9)
——显式捕获
a-z0-9
。没有射程

a
——可由
[a-z0-9]
捕获


a-z0-9
——可由
(a-z0-9)
捕获,然后可在替换和/或更高版本的表达式中引用。

[a-z0-9]
将匹配任何小写字母或数字
(a-z0-9)
将匹配精确的字符串
“a-z0-9”
,并允许两个附加的内容:您可以对整个组应用诸如
*
+
之类的修饰符,并且您可以在匹配后使用
$1
\1
引用此匹配。不过,这对您的示例没有帮助。

[a-z0-9]
将与
abcdefghijklmnopqrstuvwxyz012456789
中的一个匹配。换句话说,方括号正好匹配一个字符


(a-z0-9)
将匹配两个字符,第一个是
abcdefghijklmnopqrstuvxyz
,第二个是
0123456789
中的一个,就像括号不在那里一样。()将允许您准确读取匹配的字符。括号也可用于将两个表达式与条形码字符进行OR运算。例如,
(a-z | 0-9)
将匹配一个字符,即任何小写字母或数字。

尝试([a-z0-9])捕获小写字母和数字的混合字符串,以及捕获用于反向引用(或提取).

+1以获取指向www.regular-expressions.info的链接。regex问题的良好资源。范围仅存在于字符类中
(a-z | 0-9)
将匹配字符串
a-z
0-9
,但不匹配
a
5
。啊,感谢您的澄清。([a-z]|[0-9])将是我描述的更多内容。请检查您是否可以告诉我为什么这两个是不同的
/[\s+],[\s+]?/
vs
/(\s+),(\s+)/
第一个在字符类中有字符,第二个使用捕获组。这些表达方式实际上完全不同。第一个将匹配0或1个空格字符或a+,后跟逗号,后跟0或1个空格字符或a+。后者将匹配0个或多个空格字符,后跟逗号,后跟0个或多个空格字符。因此,基本上,如果您有如下字符串:
var myStr=',“
,第一个表达式将不匹配,而第二个表达式将匹配。如果您有另一个字符串,如下所示:
var myOtherStr='+,'
,它将与第一个表达式匹配,但与第二个表达式不匹配。我使用JS作为示例语言,但其概念是大多数正则表达式的工作方式。如果你想学习正则表达式,它是一个很好的资源
+
在几乎所有类型的正则表达式中都是一个特殊字符。但是,当位于字符组(位于
[]
中的一组字符)内部时,
+
将作为常规字符进行匹配。