Either|Or 正则表达式的一部分,用于匹配两种可能性
Either|Or part of regex for matching two possibilities
我们有两种方式引用同一个系统:
- tr12345
- fr12345
现在我每个变体都有一个正则表达式,例如
/(?:^|^\s|[^\/a-zA-Z0-9])tr([0-9]+).*$/img
/(?:^|^\s|[^\/a-zA-Z0-9])fr([0-9]+).*$/img
这很好用,但我认为将两者结合起来会更有效率。我从其他文章中看到,您可以使用交替 |
来匹配变体。如果我试图匹配两者,是否需要在 "tr" 之后重复正则表达式?
例如,这样的事情可能吗?
/(?:^|^\s|[^\/a-zA-Z0-9])tr|fr([0-9]+).*$/img
示例输入 1:
tr12345
期望的输出1:
12345
示例输入 2:
fr123456
期望的输出2:
123456
我一直在这里玩:
https://regex101.com/r/FUCmv0/2
您尝试以错误的方式进行操作。 '|'实际上是 OR,并且优先级较低,所以你的正则表达式是 ...tr OR fr...,但你需要 ...(tr|fr)...
所以你应该使用 ()(就像在数学表达式中一样)。正则表达式将是
/(?:^|^\s|[^\/a-zA-Z0-9])(tr|fr)([0-9]+).*$/img
请注意 () 也会生成匹配组。
但在你的情况下,下一个表达式会更好:
/(?:^|^\s|[^\/a-zA-Z0-9])[tf]r([0-9]+).*$/img
这里[tf]
表示"one of [t,r]"
我们有两种方式引用同一个系统:
- tr12345
- fr12345
现在我每个变体都有一个正则表达式,例如
/(?:^|^\s|[^\/a-zA-Z0-9])tr([0-9]+).*$/img
/(?:^|^\s|[^\/a-zA-Z0-9])fr([0-9]+).*$/img
这很好用,但我认为将两者结合起来会更有效率。我从其他文章中看到,您可以使用交替 |
来匹配变体。如果我试图匹配两者,是否需要在 "tr" 之后重复正则表达式?
例如,这样的事情可能吗?
/(?:^|^\s|[^\/a-zA-Z0-9])tr|fr([0-9]+).*$/img
示例输入 1:
tr12345
期望的输出1:
12345
示例输入 2:
fr123456
期望的输出2:
123456
我一直在这里玩: https://regex101.com/r/FUCmv0/2
您尝试以错误的方式进行操作。 '|'实际上是 OR,并且优先级较低,所以你的正则表达式是 ...tr OR fr...,但你需要 ...(tr|fr)...
所以你应该使用 ()(就像在数学表达式中一样)。正则表达式将是
/(?:^|^\s|[^\/a-zA-Z0-9])(tr|fr)([0-9]+).*$/img
请注意 () 也会生成匹配组。
但在你的情况下,下一个表达式会更好:
/(?:^|^\s|[^\/a-zA-Z0-9])[tf]r([0-9]+).*$/img
这里[tf]
表示"one of [t,r]"