# Regular Expressions Basics

## Repetitions

Repetitions simplify using the same pattern several consecutive times. They also allow for flexible length searches, so you can match 'aaZ' and 'aaaaaaaaaaaaaaaaZ' with the same pattern.

`{`

`}`

Ranges

You can use the following syntax for defined ranges:

Pattern | Description |
---|---|

`{n}` | Repeat the previous symbol exactly `n` times |

`{n,}` | Repeat the previous symbol `n` or more times |

`{min,max}` | Repeat the previous symbol between `min` and `max` times, both included |

So `a{6}`

is the same as `aaaaaa`

, and `[a-z]{1,3}`

will match any text that has between 1 and 3 consecutive letters.

Note:In repetitions, each symbol match is independent. If`[a-z]{1,3}`

first matches with 'a', on the next letter it can match with anything in the [a-z] range, not only 'a'.

#### Other Ranges

You can use the following syntax for other types of ranges:

Pattern | Description |
---|---|

`*` | Repeat the previous symbol `0` or more times |

`+` | Repeat the previous symbol `1` or more times |

`?` | Repeat the previous symbol `0` or `1` times |

Note:`*`

is the same as`{0,}`

,`+`

is the same as`{1,}`

, and`?`

is the same as`{0,1}`

A common use for `?`

is to allow both singular and plural words: `cats?`

will match either `cat`

or `cats`

.

Repetitions are greedy on searches; they try to get the largest match possible. Sometimes that's undesired, so you can force a lazy search by adding `?`

after `*`

or `+`

.
The `?`

instructs the regex engine to make a lazy search, which gives the smallest match possible.

Greedy Search: `a.*a`

will find
Lazy Search: `a.*?a`

will find

Note:Regex is not recommended for parsing XML or HTML. See: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags However it can find what you need for simpler things.

In the next lesson, you'll learn about Alternations.