繁体   English   中英

匹配用斜杠分隔的字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM