首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“(Ex1) and (Ex2)AC.26(Ex3)”和"[(ex1)(ex2)(ex3)]“的区别是什么?

“(Ex1) and (Ex2)AC.26(Ex3)”和"[(ex1)(ex2)(ex3)]“的区别是什么?
EN

Stack Overflow用户
提问于 2014-11-27 09:48:12
回答 7查看 777关注 0票数 5

我正在尝试创建一些通用代码来简化regexes的使用,并考虑如何实现OR函数。

标题非常准确(ex1、ex2、ex3是任何正则表达式)。不考虑分组,以下几个方面有什么区别:

代码语言:javascript
复制
"(ex1)|(ex2)|(ex3)"

代码语言:javascript
复制
"[(ex1)(ex2)(ex3)]"

这两者都应该是命名的regexes之间的关系,我可能只是遗漏了一些东西。一个比另一个更有效率吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-11-27 09:50:27

代码语言:javascript
复制
(ex1)|(ex2)|(ex3)

这里您将捕获ex1ex2ex3

在此:

代码语言:javascript
复制
[(ex1)(ex2)(ex3)]

()被引用和处理,因为它们包含在[] (字符类)中,它匹配()ex123

请注意,它等同于(订单并不重要):

代码语言:javascript
复制
[ex123)(]

字符集的重要注释:

插入符(^)和连字符(-)可以按原样包括在内。如果你想包括连字符,你应该把它放在字符类的最开始。如果要将插入符号匹配为字符集的一部分,则不应将其作为第一个字符:

  • [^]x]匹配任何而不是 ]x,其中[]^x]匹配]^x
  • [a-z]匹配从az的所有字母,其中[-az]匹配-az
票数 4
EN

Stack Overflow用户

发布于 2014-11-27 09:53:33

(ex1)|(ex2)|(ex3)匹配ex1 (第1组可用)、ex2 (第2组可用)或ex3 (第3组可用)。

Debuggex Demo

[(ex1)(ex2)(ex3)]匹配(ex123)

Debuggex Demo

票数 5
EN

Stack Overflow用户

发布于 2014-11-27 09:53:00

他们根本不一样。

(ex1)|(ex2)|(ex3)为文字文本ex1ex2ex3定义了一系列交替捕获组。也就是说,如果存在ex1,将在第一个捕获组中捕获;或者ex2 (如果存在)将在第二个捕获组中捕获;或者ex3 (如果存在)将被捕获在第三个组中。(这将是一个相当奇怪的表达式,更可能是(ex1|ex2|ex3),它匹配并捕获ex1ex2ex3。)

[(ex1)(ex2)(ex3)]定义了一个字符类,它将匹配以下任何字符(只有一个字符):(ex1)23。没有捕获组,[]中的文本按字面处理。

类文档详细介绍了模式是如何工作的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27167516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档