Possessive (non-backtracking) quantified subpatterns ++ *+ {}+

Q

What is possessive (non-backtracking) quantified subpatterns?

How to write a possessive quantified subpattern to match double-quoted strings like this: "He said: \“Hello!\”"?

✍: FYIcenter.com

A

If you don't want the default backtracking behavior of quantified subpatterns, you can turn it off by adding the "possessive" quantifier '+' immediately after the quantifier. This will force the quantified subpattern to repeat itself as many time as allowed.

In most case, possessive (non-backtracking) quantified subpatterns are used to improve match performance by avoiding unnecessary backtracking. For example,

<[^>]*+> # [^>]*+ is a possessive quantified subpattern
         non-'>' character subpattern can be repeated safely
         without any backtracking because the next subpattern is >

The regular expression to match double-quoted strings efficiently is:

"(?:[^"\]++|\.)*+"

(?:...)    - non-capture grouping
[^"\]++   - repeat [^"\] 1 or more times without backtracking
\.        - any character escaped by \
(...)*+    - repeat (...) 0 or more times without backtracking

Click the button to test this regular expression here online:

2013-01-26, 0👍, 0💬