簡體   English   中英

簡化復雜的長正則表達式

[英]Simplifying a long complex regex

每次我必須檢查輸入時,我都無法創建正則表達式。

我必須檢查輸入的格式是否正確。 輸入格式可以是:

  1. AA:BB:CC DDD/EEE
  2. CC DDD/EEE

不要介意大寫。 A、B、C 和 D 可以是字母(大寫或非大寫)或數字。

我想出了這個正則表達式(有效),但如何簡化甚至優化它。

([a-zA-Z0-9])*([:])?([a-zA-Z0-9])*([:])?([a-zA-Z0-9])+([ ]){1}([a-zA-Z0-9])+([/]){1}([a-zA-Z0-9])+
  • 如果只在[]放一個字符,那么[]是多余的,因此[/]可以簡化為/[:]可以簡化為:等。

  • 您也不需要指定某些內容重復{1}次,因此可以刪除這些內容。

  • []0-9可以簡化為\\d

應用以上,我們得到:

([a-zA-Z\d])*(:)?([a-zA-Z\d])*(:)?([a-zA-Z\d])+( )([a-zA-Z\d])+(/)([a-zA-Z\d])+
  • (:)? 將捕獲:或什么都不捕獲( null )。 如果您不需要這個,您可以刪除該組。 同樣, ( )總是會捕獲一個空格,這似乎毫無意義。

  • ([a-zA-Z\\d])*只會捕獲最后一次重復。 您可能想要([a-zA-Z\\d]*) ,或者不捕獲任何內容。

假設您不想捕獲任何內容,因此刪除所有組,我們得到:

[a-zA-Z\d]*:?[a-zA-Z\d]*:?[a-zA-Z\d]+ [a-zA-Z\d]+/[a-zA-Z\d]+

最后但並非最不重要的:

  • 一開始, [a-zA-Z\\d]*:? 重復兩次,我們可以使用{2}量詞。

  • 如果將Pattern.CASE_INSENSITIVE選項傳遞給Pattern.compile ,則不需要每次都指定AZ

現在我們得到:

([a-z\d]*:?){2}[a-z\d]+ [a-z\d]+/[a-z\d]+

暫無
暫無

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

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