[英]Match a string separated by slashes
在第一个样本中,我要匹配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
=(.+)\\/(.+)
,则不会匹配任何内容 。
如果我在=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来测试正则表达式。
这应该适用于所有三种情况:
^=(.+)\/(.+)\/(.+)|=(.+)\/(.+)|=(.+)$
说明:
^ # Assert position at the beginning of the line
=(.+)\/(.+)\/(.+) # Three slashes
| # OR
=(.+)\/(.+) # Two slashes
| # OR
=(.+) # No slashes
$ # Assert position at the end of the line
=([^\/]+)\/?(.+)?
? 将其设为可选。 这将选择第一组之前/之后的所有内容。 其余均为可选
如果您还想匹配空值,则可以用*更改+。
通用,支持任意数量的/
=(([^\/]+)\/?)*
只需在第二组中查找值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.