phpregexbackreference

Can you use back references in the pattern part of a regular expression?


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


Solution

  • You can make use of the regex:

    (["'])[^"']+\1
    

    In PHP you'd use this as:

    preg_match('#(["\'])[^"\']+\1#',$str)