2017-10-12 68 views
1

我需要在以下情况下帮助: pr_zip匹配“someregexhere”正则表达式与特定邮政编码

的问题是我回到72701,我不想回这个zip。我只想返回这些拉链。

我想过做这样的事情

7(190)%|?7(191)%|?7(1949)|。?。?7(195)%7(1949年)。 ?%

但这似乎笨重,必须有更好的方法。

'7 [1,2,5] [0,7,8,9,5] [0-9] [0-9]%')

此不起作用,因为它拉更邮编比我需要的。

有人有想法吗?

71901% 
71902% 
71903% 
71909% 
71910% 
71913% 
71914% 
71949% 
71951% 
71956% 
71964% 
71968% 
72087% 
71834% 
71937% 
71839% 
71840% 
71854% 
71724% 
71730% 
71731% 
71747% 
71749% 
71750% 
71758% 
71759% 
71762% 
71765% 
71768% 
75501% 
75503% 
75504% 
75505% 
75507% 
75559% 
75561% 
75567% 
75569% 
75570% 
75573% 
75574% 
75599% 
+2

所以仅仅是明确的,你应该公布所有的比赛,而不是其他应匹配列表中的号码? – CAustin

回答

3

没有理由以这种巧妙;只需使用一个普通的老更替:

\b(71901|71902|...etc)\b 

试图“最小化”的正则表达式实现了什么,但混淆了拉链,这使得阅读和维护的正则表达式不可能的。

KISS principle

+0

你可能认为这是个好建议,但事实并非如此。你建议只有第一级特里。他有42个参赛作品。它在失败之前检查全部42个。如果使用多级别线索,则在1次检查后失败。 – sln

0

你在这里。

你可以用一个漂亮的小工具来为你做它虽然Strings to Regex

7(?:1(?:7(?:24|3[01]|4[79]|5[089]|6[258])|8(?:3[49]|40|54)|9(?:0[1239]|1[034]|37|49|5[16]|6[48]))|2087|55(?:0[13457]|59|6[179]|7[034]|99))%

https://regex101.com/r/EePsaG/1

格式化:

7 
(?: 
     1 
     (?: 
      7 
      (?: 
       24 
      | 3 [01] 
      | 4 [79] 
      | 5 [089] 
      | 6 [258] 
      ) 
     | 8 
      (?: 3 [49] | 40 | 54) 
     | 9 
      (?: 
       0 [1239] 
      | 1 [034] 
      | 37 
      | 49 
      | 5 [16] 
      | 6 [48] 
      ) 
    ) 
    | 2087 
    | 55 
     (?: 
      0 [13457] 
     | 59 
     | 6 [179] 
     | 7 [034] 
     | 99 
    ) 
) 
% 
相关问题