Question: ```
$content = 'blah [faq] blag blag blag [/faq] blah';

preg_match("%\[faq\].*\[/faq\]%i", $content, $matches);

print_r($matches);

```

I know my regex has an issue here because it's not working. I want `matches[0]` to return `blag blag blag`.

Answer: 
Your problem can be solved with this.

```
$content = 'blah [faq] blag blag blag [/faq] blah';

preg_match("%\[faq\](.*?)\[/faq\]%i", $content, $matches);

print_r($matches[1]);

```

We add one more match and get it index 1. Index 0 is full matched pattern and index 1 is second match from question mark in (.\*?)
Your code is basically correct, except that you should provide a capture group to capture the content in between the tags. Then, access that captured content in `$matches[1]`, not `$matches[0]`, the latter which would contain the entire match.

```
\[faq\](.*?)\[/faq\]

```

Updated script:

```
$content = 'blah [faq] blag blag blag [/faq] blah';
preg_match("/\[faq\](.*?)\[\/faq\]/", $content, $matches);
echo $matches[1];

```

This prints:

```
blag blag blag

```

Note: I switched the delimiter from `%` to `/`, which is more typical.