Can you use back references in the pattern part of a regular expression?
backreference, php, regex
Solution
You can make use of the regex:
(["'])[^"']+\1
- `()` : used for grouping
- `[..]` : is the char class. so `["']` matches either `"` or `'` equivalent to `"|'`
- `[^..]` : char class with negation. It matches any char not listed after the `^`
- `+` : quantifier for one or more
- `\1` : backreferencing the first group which is `(["'])`
In `PHP` you'd use this as:
preg_match('#(["\'])[^"\']+\1#',$str)
Problem
Is there a way to back reference in the regular expression pattern? Example input string: ``` Here is "some quoted" text. ``` Say I want to pull out the quoted text, I could create the following expression: ``` "([^"]+)" ``` This regular expression would match `some quoted`. Say I want it to also support single quotes, I could change the expression to: ``` ["']([^"']+)["'] ``` But what if the input string has a mixture of quotes say `Here is 'some quoted" text.` I would not want the regex to match. Currently the regex in the second example would still match. What I would like to be able to do is if the first quote is a double quote then the closing quote must be a double. And if the start quote is single quote then the closing quote must be single. Can I use a back reference to achieve this? My other related question: Getting text between quotes using regular expression