16

I have a regex problem I can't seem to solve. I actually don't know if regex can do this, but I need to match a range of characters n times at the end of a pattern. eg. blahblah[A-Z]{n} The problem is whatever character matches the ending range need to be all the same.

For example, I want to match

  • blahblahAAAAA
  • blahblahEEEEE
  • blahblahQQQQQ

but not

  • blahblahADFES
  • blahblahZYYYY

Is there some regex pattern that can do this?

Erin Aarested
  • 403
  • 1
  • 4
  • 11

4 Answers4

30

You can use this pattern: blahblah([A-Z])\1+

The \1 is a back-reference to the first capture group, in this case ([A-Z]). And the + will match that character one or more times. To limit it you can replace the + with a specific number of repetitions using {n}, such as \1{3} which will match it three times.

If you need the entire string to match then be sure to prefix with ^ and end with $, respectively, so that the pattern becomes ^blahblah([A-Z])\1+$

You can read more about back-references here.

Ahmad Mageed
  • 91,579
  • 18
  • 159
  • 169
3

In most regex implementations, you can accomplish this by referencing a capture group in your regex. For your example, you can use the following to match the same uppercase character five times:

blahblah([A-Z])\1{4}

Note that to match the regex n times, you need to use \1{n-1} since one match will come from the capture group.

Andrew Clark
  • 192,132
  • 30
  • 260
  • 294
2

blahblah(.)\1*\b should work in nearly all language flavors. (.) captures one of anything, then \1* matches that (the first match) any number of times.

dlras2
  • 8,218
  • 6
  • 48
  • 90
0

blahblah([A-Z]|[a-z])\1+ This should help.