# ": pcre\_compile() failed: missing terminating \]" in rewrite rule

**URL:** <https://www.ruby-forum.com/t/pcre-compile-failed-missing-terminating-in-rewrite-rule/188496>\
**Category:** NGINX\
**Created:** [May 12, 2010, 11:09pm UTC](https://www.ruby-forum.com/t/pcre-compile-failed-missing-terminating-in-rewrite-rule/188496 "2010-05-12T23:09:50Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![gregbugaj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/df788c/32.png) [@gregbugaj](https://www.ruby-forum.com/u/gregbugaj)\
**Post date:** [May 12, 2010, 11:09pm UTC](https://www.ruby-forum.com/t/pcre-compile-failed-missing-terminating-in-rewrite-rule/188496/1 "2010-05-12T23:09:50Z")

</div>

Hi.

I’m trying to do some rewrite. My url is:  
[http://domain.tld/stream/file/{username}{crc\_username}{hash-file}.{extension}](http://domain.tld/stream/file/%7Busername%7D%7Bcrc_username%7D%7Bhash-file%7D.%7Bextension%7D)  
and I’m want it to rewrite it to different location, where files  
physically are.

```
    location ^~ /stream/file/ {
            rewrite

```

“([a-f0-9]{8})([a-f0-9]{8})([a-f0-9]{40})(.[^./\]\*)$?”  
/files/$1.$2/$3$4 last;  
alias /home/resources/upload/;  
mp4;  
}

and while testing configuration I got error:  
[emerg]: pcre\_compile() failed: missing terminating ] for character  
class in “([a-f0-9]{8})([a-f0-9]{8})([a-f0-9]{40})(.[^./]\*)$?”

And I don’t see why I missed one ] ? When I add ] to the end I got  
error: pcre\_compile() failed: missing terminating ).

Any help appreciate 🙂

---

<div class="post-metadata">

**Author:** ![gregbugaj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/df788c/32.png) [@gregbugaj](https://www.ruby-forum.com/u/gregbugaj)\
**Post date:** [May 13, 2010, 1:18pm UTC](https://www.ruby-forum.com/t/pcre-compile-failed-missing-terminating-in-rewrite-rule/188496/2 "2010-05-13T13:18:01Z")

</div>

Hi

Thanks Maxim, everything work like a charm now 🙂

–  
Best Regards  
Grzegorz  
Sieñko  
2010/5/12 Maxim D. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

---

<div class="post-metadata">

**Author:** ![gregbugaj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/df788c/32.png) [@gregbugaj](https://www.ruby-forum.com/u/gregbugaj)\
**Post date:** [May 12, 2010, 11:49pm UTC](https://www.ruby-forum.com/t/pcre-compile-failed-missing-terminating-in-rewrite-rule/188496/3 "2010-05-12T23:49:03Z")

</div>

Hello!

On Wed, May 12, 2010 at 11:09:12PM +0200, Grzegorz S. wrote:

> Hi.
> 
> I’m trying to do some rewrite. My url is:  
> [http://domain.tld/stream/file/{username}{crc\_username}{hash-file}.{extension}](http://domain.tld/stream/file/%7Busername%7D%7Bcrc_username%7D%7Bhash-file%7D.%7Bextension%7D)  
> and I’m want it to rewrite it to different location, where files physically are.
> 
> ```
> location ^~ /stream/file/ {
> rewrite
> 
> ```
> 
> “([a-f0-9]{8})([a-f0-9]{8})([a-f0-9]{40})(.[^./\]\*)$?”

- “([a-f0-9]{8})([a-f0-9]{8})([a-f0-9]{40})(.[^./\]\*)$?”

- “([a-f0-9]{8})([a-f0-9]{8})([a-f0-9]{40})(\.[^./\\]\*)?$”

nginx uses '' as escape character in it’s config syntax, and it  
should be doubled if you want to pass it literally.

(and you don’t need '' before ‘.’ in character group; and don’t  
need '' before ‘/’; and ‘?’ can’t follow ‘$’)

[…]

> and while testing configuration I got error:  
> [emerg]: pcre\_compile() failed: missing terminating ] for character  
> class in “([a-f0-9]{8})([a-f0-9]{8})([a-f0-9]{40})(.[^./]\*)$?”
> 
> And I don’t see why I missed one ] ? When I add ] to the end I got  
> error: pcre\_compile() failed: missing terminating ).

Regexp printed in error message is a hint.

Maxim D.
