我正在尝试创建一些通用代码来简化regexes的使用,并考虑如何实现OR函数。
标题非常准确(ex1、ex2、ex3是任何正则表达式)。不考虑分组,以下几个方面有什么区别:
"(ex1)|(ex2)|(ex3)"和
"[(ex1)(ex2)(ex3)]"这两者都应该是命名的regexes之间的关系,我可能只是遗漏了一些东西。一个比另一个更有效率吗?
发布于 2014-11-27 09:50:27
(ex1)|(ex2)|(ex3)这里您将捕获ex1、ex2和ex3。
在此:
[(ex1)(ex2)(ex3)](和)被引用和处理,因为它们包含在[和] (字符类)中,它匹配(、)、e、x、1、2和3。
请注意,它等同于(订单并不重要):
[ex123)(]字符集的重要注释:
插入符(^)和连字符(-)可以按原样包括在内。如果你想包括连字符,你应该把它放在字符类的最开始。如果要将插入符号匹配为字符集的一部分,则不应将其作为第一个字符:
[^]x]匹配任何而不是 ]和x,其中[]^x]匹配]、^或x[a-z]匹配从a到z的所有字母,其中[-az]匹配-、a和z发布于 2014-11-27 09:53:33
(ex1)|(ex2)|(ex3)匹配ex1 (第1组可用)、ex2 (第2组可用)或ex3 (第3组可用)。

[(ex1)(ex2)(ex3)]匹配(,e,x,1,2,3或)

发布于 2014-11-27 09:53:00
他们根本不一样。
(ex1)|(ex2)|(ex3)为文字文本ex1、ex2和ex3定义了一系列交替捕获组。也就是说,如果存在ex1,将在第一个捕获组中捕获;或者ex2 (如果存在)将在第二个捕获组中捕获;或者ex3 (如果存在)将被捕获在第三个组中。(这将是一个相当奇怪的表达式,更可能是(ex1|ex2|ex3),它匹配并捕获ex1、ex2或ex3。)
[(ex1)(ex2)(ex3)]定义了一个字符类,它将匹配以下任何字符(只有一个字符):(ex1)23。没有捕获组,[]中的文本按字面处理。
类文档详细介绍了模式是如何工作的。
https://stackoverflow.com/questions/27167516
复制相似问题