Reputation: 33
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.
Upvotes: 1
Views: 105
Reputation: 163467
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 digitsUpvotes: 2