簡體   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