簡體   English   中英

你如何用正則表達式做這個條件情況?

[英]How do you do this conditional situation with regular expression?

  1. 用字母數字^[a-z0-9]
  2. 然后是這個可選的點\\.?
  3. 如果有一個點,則必須跟隨2到4個字母[az]{2,4}
  4. 它必須以字母[az]$結尾
  5. 它必須是一個點,最多只有兩個點。

它就像域名:

yahoo.co.ukyahoo.com ,但你不能這樣做yahoo.co.u或這yahoo.co. ,是的。

您可以將可選點與必須遵循的2-4個字符分組: (\\.[az]{2,4}) 也就是說,你將要么沒有,要么最多有兩組點+字母字符(\\.[az]{2,4}){0,2}

必須以[az]部分結束,你可以檢查一個正的lookbehind (?<=[az])給出這個完整的正則表達式:

^[a-z0-9]+(\.[a-z]{2,4}){0,2}(?<=[a-z])$

這將適用於Perl和PHP正則表達式(PCRE),但不適用於JavaScript,因為它不支持lookbehind。 在這種特定情況下,您可以解決該限制。

如果至少有一個點,則已經保證它將以[az]結束,因為該測試位於點所屬的組中。 如果沒有點,則需要在末尾強制[az] 為此,您可以將一個或多個量詞( + )轉換為零或更多( * ),並在沒有“點組”時強制結束為[az] 當有點組時,您可以保持相同的模式,但現在至少有一個必需的點。

^([a-z0-9]*[a-z]|[a-z0-9](+\.[a-z]{2,4}){1,2})$

這將檢查以[az][0-9]開頭的字符串,然后包含一個或兩個點,后跟2/4字母。 它的工作原理(在Python,至少)為例子,你提供的(真正的yahoo.co.ukyahoo.com ,假的yahoo.co.uyahoo.co.

^[a-z0-9]+(\.[a-z]{2,4}){1,2}$

編輯 - 重新閱讀時,我想你可能想要這個:

^[a-z0-9]*([a-z0-9](\.[a-z]{2,4}){1,2}$|[a-z]$)

這將匹配不包括點但以字母結尾的字符串(除上述之外),例如yahoo ,但不包括yahoo2

嘗試這個:

^[a-z0-9](\.[a-z]{2,4}|.*[a-z]$)
^[a-z0-9](?=[^.]*\.[^.]+$|[^.]*\.[^.]\.[^.]+$)(\.(?=[a-z][a-z]){1,2}).*[a-z]$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM