简体   繁体   中英

Regular expression to match any number except for one containing repeated zeros

I want to match large numbers in my data but sometimes the data includes repeated zeros for emphasis rather than phone numbers. How can I identify numbers at least nine digits long and not include any numbers with repeated zeros (say, at least 5)? For example:

match: call me at 19083910893

don't match: this x1000000000

I tried [0-9]+(?!0+) but this isn't what I need because the negative lookahead doesn't unmatch results found with the [0-9]+ . Somehow, (\d)(?!0+)\d+ works in tests but I don't really understand why.

You could use

(?<!\d)(?!\d*0{5})\d{9,}

Explanation

  • (?<!\d) Negative lookbehind, assert not a digit directly to the left
  • (?!\d*0{5}) Assert that at the right are not 5 zeroes
  • \d{9,} Match 9 or more digits

Regex demo

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM