Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to represent a fix number of repeats in regular expression?

Tags:

java

regex

I am wondering if there is a better to represent a fix amount of repeats in a regular expression. For example, if I just want to match exactly 14 letters/digits, I am using ^\w\w\w\w\w\w\w\w\w\w\w\w\w\w$ which will match a word like UNL075BE499135 and not match UNL075BE499135AAA is there a handy way to do it? In am currently doing it in java but I guess this may apply to other language as well. Thanks in advance.

like image 846
Ken Avatar asked Jul 16 '10 02:07

Ken


People also ask

What regex syntax is used for matching any number of repetitions?

A repeat is an expression that is repeated an arbitrary number of times. An expression followed by '*' can be repeated any number of times, including zero. An expression followed by '+' can be repeated any number of times, but at least once.

How do you find the number of matches in a regular expression?

To count the number of regex matches, call the match() method on the string, passing it the regular expression as a parameter, e.g. (str. match(/[a-z]/g) || []). length . The match method returns an array of the regex matches or null if there are no matches found.

What does '*' represent in regular expression?

is called the wildcard character. Example : The Regular expression . * will tell the computer that any character can be used any number of times.

What does * do in regex?

The Match-zero-or-more Operator ( * ) This operator repeats the smallest possible preceding regular expression as many times as necessary (including zero) to match the pattern. `*' represents this operator. For example, `o*' matches any string made up of zero or more `o' s.


2 Answers

For Java:

Quantifiers documentation

X, exactly n times: X{n}
X, at least n times: X{n,}
X, at least n but not more than m times: X{n,m}

like image 158
shookster Avatar answered Oct 28 '22 17:10

shookster


The finite repetition syntax uses {m,n} in place of star/plus/question mark.

From java.util.regex.Pattern:

X{n}      X, exactly n times X{n,}     X, at least n times X{n,m}    X, at least n but not more than m times 

All repetition metacharacter have the same precedence, so just like you may need grouping for *, +, and ?, you may also for {n,m}.

  • ha* matches e.g. "haaaaaaaa"
  • ha{3} matches only "haaa"
  • (ha)* matches e.g. "hahahahaha"
  • (ha){3} matches only "hahaha"

Also, just like *, +, and ?, you can add the ? and + reluctant and possessive repetition modifiers respectively.

    System.out.println(         "xxxxx".replaceAll("x{2,3}", "[x]")     ); "[x][x]"      System.out.println(         "xxxxx".replaceAll("x{2,3}?", "[x]")     ); "[x][x]x" 

Essentially anywhere a * is a repetition metacharacter for "zero-or-more", you can use {...} repetition construct. Note that it's not true the other way around: you can use finite repetition in a lookbehind, but you can't use * because Java doesn't officially support infinite-length lookbehind.

References

  • regular-expressions.info/Repetition

Related questions

  • Difference between .* and .*? for regex
  • regex{n,}? == regex{n}?
  • Using explicitly numbered repetition instead of question mark, star and plus
    • Addresses the habit of some people of writing a{1}b{0,1} instead of ab?
like image 38
polygenelubricants Avatar answered Oct 28 '22 15:10

polygenelubricants