2016-01-22 52 views
1

有什麼辦法來創建一個正則表達式匹配*-*-*-*-*(帶4」的字符串,所以它會匹配1-2-3-4-5AB-CD-EF-GH-IJ但不9-8-7正則表達式匹配4減去非相鄰

我已經試過

最近正則表達式是([\w\-\.]+[\-\.][\w\-\.]+[\w\-\.]+)但它匹配9-8-7,太。

+0

匹配字? – tchelidze

+0

['(\ w +(?: - \ w +){4})'](https://regex101.com/r/iU2oU7/1) – Tushar

回答

0

也許這樣的事情^(?:[^-]+\-){4}[^-]+$

4次,然後其他任何字符一次或多次(比任何-一個或更多的時間後跟一個破折號其它字符)

+1

這也會匹配'A-B-C-D - '? – nikihub

+0

好點,更新 – chillitom

+0

謝謝!'([^ \ - ] + \ - ){4} [^ \ - ] +'做到了! – validom

0

您可以使用([^-])+-([^-])+-([^-])+-([^-])+-([^-])+([^-])+將匹配其中沒有-的每個字符串。

+0

或者反斜槓,就是你寫它的方式。 – tripleee

+0

我用反斜槓來逃避'-'。 – nikihub

+0

這不是它所做的。沒有必要逃避減號,只要它是角色類中的第一個或最後一個,也沒有辦法。在字符類中,反斜槓只代表大多數正則表達式。 – tripleee

0
(.*([^-]|^)-){4} 

See it in action

  • .* - 零個或多個字符
  • ([^-]|^) - 一個字符,這是不是一個破折號或字符串本身
  • -的開始 - 一個破折號字面上
  • {4} - 整件事重複4次
0

你可以使用這個表達式:

^[^-.]+([-.])(?:[^-.]+\1){3}[^-.]+$ 

RegEx Demo

破碎:

^   # start 
[^-.]+  # match 1 or more of non-dot & non-hyphen char 
([-.])  # match 1 dot OR hyphen char and capture it as group #1 
(?:   # non-capturing group start 
    [^-.]+ # match 1 or more of non-dot & non-hyphen char 
    \1  # match same char as captured in group #1 
){3}   # non-capturing group end, repeat 3 occurrences of this group 
[^-.]+  # match 1 or more of non-dot & non-hyphen char 
$   # end 
1

沒有其他限制,-([^-]+-){3}您的要求相匹配。

你自己的嘗試只覆蓋三次重複,並且允許一段時間或空白而不是任何破折號。

0

從廣義上講,如果你設置X表示「任何字符,除了不相鄰的連字符」,那麼你的圖案成爲

X*-X+-X+-X+-X*

所以面臨的挑戰是剛剛確定X作爲所有非連字符或字符串相鄰的連字符。

([^-]|(--+))

撰寫兩...

([^-]|(--+))*-([^-]|(--+))+-([^-]|(--+))+-([^-]|(--+))+-([^-]|(--+))*

這裏試試吧...... 其中包含至少4個不相鄰的`-`簽署https://regex101.com/r/lG3hM5/1