"(ex1)|(ex2)|(ex3)"和"[(ex1)(ex2)(ex3)]"之间的区别是什么

Att*_*zki 5 java regex

我正在尝试创建一些通用代码以简化正则表达式的使用,并考虑如何实现OR函数.

标题非常准确(ex1,ex2,ex3是任何正则表达式).不考虑分组,有什么区别:

"(ex1)|(ex2)|(ex3)"
Run Code Online (Sandbox Code Playgroud)

"[(ex1)(ex2)(ex3)]"
Run Code Online (Sandbox Code Playgroud)

这两者都应该是命名的正则表达式之间的关系,我可能会遗漏一些东西.一个人比另一个人更有效率吗?

sp0*_*00m 5

(ex1)|(ex2)|(ex3)匹配ex1(在第1组中可用),ex2(在第2组中可用)或ex3(在第3组中可用)

正则表达式可视化

Debuggex演示


[(ex1)(ex2)(ex3)]比赛(,e,x,1,2,3或者)

正则表达式可视化

Debuggex演示


Mar*_*oun 4

(ex1)|(ex2)|(ex3)
Run Code Online (Sandbox Code Playgroud)

在这里你正在捕获ex1ex2并且ex3

这里:

[(ex1)(ex2)(ex3)]
Run Code Online (Sandbox Code Playgroud)

(and)被引用并按原样处理,因为它们包含在[and ]字符类)中,它匹配(, ), e, x, 1,23

请注意,它相当于(顺序并不重要):

[ex123)(]
Run Code Online (Sandbox Code Playgroud)

关于字符集的重要说明:

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

  • [^]x]匹配任何 匹配的]内容,或者x[]^x]]^x
  • [a-z]a匹配从到z匹配[-az]的所有字母-a并且z