在第一个示例中,我想匹配Mortal
输入1:
=Mortal
正则表达式1:
=(.+)
输出1:
MATCH 1
1. [1-7] `Mortal`
正如我想的那样工作。
在第二个示例中,我想匹配Mortal
和Combat
输入2:
=Mortal/Combat
正则表达式2:
=(.+)\/(.+)
输出2:
MATCH 1
1. [1-7] `Mortal`
2. [8-14] `Combat`
正如我想的那样工作。
我的问题是,我想要一个兼具两者的解决方案。
如果我在=(.+)\/(.+)
上使用=Mortal
,则匹配无。
如果我在=(.+)
上使用=Mortal/Combat
,则匹配:
MATCH 1
1. [1-14] `Mortal/Combat`
两者都不正确。
试图将它们合并在一起:
=((.+)\/(.+)|(.+))
匹配:
MATCH 1
1. [1-14] `Mortal/Combat`
2. [1-7] `Mortal`
3. [8-14] `Combat`
或者:
MATCH 1
1. [1-7] `Mortal`
4. [1-7] `Mortal`
绝对不正确。
所需的输出应为:
MATCH 1
1. [1-7] `Mortal`
或者:
MATCH 1
1. [1-7] `Mortal`
2. [8-14] `Combat`
如果它与三个斜杠兼容,那么 也会很酷:=Mortal/Combat/X
应该变为:
MATCH 1
1. [0-6] `Mortal`
2. [7-13] `Combat`
3. [14-15] `X`
我怎样才能做到这一点?
我正在使用http://regex101.com来测试正则表达式。
答案 0 :(得分:1)
这适用于所有三种情况:
^=(.+)\/(.+)\/(.+)|=(.+)\/(.+)|=(.+)$
说明:
^ # Assert position at the beginning of the line
=(.+)\/(.+)\/(.+) # Three slashes
| # OR
=(.+)\/(.+) # Two slashes
| # OR
=(.+) # No slashes
$ # Assert position at the end of the line
答案 1 :(得分:0)
答案 2 :(得分:0)
=([^\/]+)\/?(.+)?
?使它成为可选的。这选择了/为第一组之前的所有内容。其余的是可选的
如果你想匹配空值,可以用+更改+。
通用,支持任意数量的
=(([^\/]+)\/?)*
只需在第二组中查看值
即可