[英]Simplifying a long complex regex
每次我必須檢查輸入時,我都無法創建正則表達式。
我必須檢查輸入的格式是否正確。 輸入格式可以是:
AA:BB:CC DDD/EEE
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.