优化正则表达式?

时间:2013-08-05 12:28:40

标签: regex regex-negation boost-regex regex-lookarounds regex-greedy

嗨,大家好我是新的正则表达式,我已经编写了正则表达式的一些模式匹配,但它是非常冗长的正则表达式,所以我希望任何人都可以帮助我优化它?

我的REGEX - >

(T)(\d{9})(T)(\s{0,19}\d{0,19}\s{0,19}[0-9DO ]\d{0,19}\s{0,19}[OD0-9 ]\s{0,19}\d{0,19}\s{0,19}\d{0,19}[0-9D ]\d{0,19})(O)(\s{0,5}\d{0,19})\b

我希望匹配的模式 - >

T062102098T0741 0361212401O
T011900571T 000007250107O1274
T065000090T203 93 5797 9O 4037  
T325170628T0108626004D18O01054
T071108452T    42D896D5O 3587 
T041211609T 01D1270DD4O 2721
T021407912TO9196D00580D6O 7106
T081219108T O45D936D4O 3155
T074909988T O022D853 6O 1340

模式我正在避免 - >

T071904779T154505122619 2051
T065000090T000 32 493O9O 11007

所以任何帮助都会很棒。谢谢。

1 个答案:

答案 0 :(得分:0)

您的RegEx很好,而且可以简化(可能已经优化),如下所示:

(?x)
   (
      (?:T\d{9})
      (?:T\s*\d{0,19}\s*[0-9DO ]\d{0,19}\s*[OD0-9 ]\s*\d{0,19}\s*\d{0,19}[0-9D ]\d{0,19})
      (?:O\s*\d{0,19})
      \b
   )

我在您的RegEx中找到的一件事是不必要地使用(...)。此外,使用\s{0,19}\s{0,5}可以简单地写为\s*。只有当您不限制使用0-19次或0-5次时,最后一次才会更好。