None capturing group (?:...)

Q

Is there any to stop capturing a group to improve matching performance?

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

✍: FYIcenter.com

A

Yes. To turn the default capturing behavior on a group, you can entered '?:' at the beginning of the group as (?#:...). For example:

qua(1|nt)ifier     # matches both 'qualifier' and 'quantifier'
qua(?:1|nt)ifier   # matches both words, but no capturing

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💬