简化一个长而复杂的正则表达式
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
)。如果您不需要这个,您可以删除该组。同样,( )
总是会捕获一个 space,这似乎毫无意义。
([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
,则不需要每次都指定A-Z
。
现在我们得到:
([a-z\d]*:?){2}[a-z\d]+ [a-z\d]+/[a-z\d]+
每次我必须检查输入时,我都不擅长创建正则表达式。
我必须检查输入的格式是否正确。输入格式可以是:
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
)。如果您不需要这个,您可以删除该组。同样,( )
总是会捕获一个 space,这似乎毫无意义。([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
,则不需要每次都指定A-Z
。
现在我们得到:
([a-z\d]*:?){2}[a-z\d]+ [a-z\d]+/[a-z\d]+