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