|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #26854 Using ! as a delimiter for regexps will not allow neg. lookahead assertions
Submitted: 2004-01-09 12:39 UTC Modified: 2004-01-09 13:07 UTC
From: chris_se at gmx dot net Assigned:
Status: Not a bug Package: PCRE related
PHP Version: 4.3.4 OS: Linux
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
Block user comment
Status: Assign to:
Bug Type:
From: chris_se at gmx dot net
New email:
PHP Version: OS:


 [2004-01-09 12:39 UTC] chris_se at gmx dot net
When I try to use ! as delimiter and use a negative lookahead assertion which is normally started with (?!, (?! of course does not work, because the ! will terminate the pattern (and PHP will of course complain). But when I try to escape the exclamation mark like (?\!, an error occurs.

I assume the \ is not removed in front of the ! after the pattern is freed from its delimiters.

Reproduce code:
$res = preg_match ("!^(?\\!foo)[a-z]{3}$!", "bar");

Expected result:
$res contains true

Actual result:
Warning: Compilation failed: unrecognized character after (? at offset 3 in /home/christian/- on line 2


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2004-01-09 12:57 UTC]
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at and the instructions on how to report
a bug at

Use a different delimiter instead. The library does not remove backslashes before delimiters and PCRE doesn't know what to do with (?\\!).
 [2004-01-09 13:07 UTC] chris_se at gmx dot net
Even if this is not a bug (in my eyes, it still is), it is at least a documentation problem:


The syntax for patterns used in these functions closely resembles Perl. The expression should be enclosed in the delimiters, a forward slash (/), for example. Any character can be used for delimiter as long as it's not alphanumeric or backslash (\). If the delimiter character has to be used in the expression itself, it needs to be escaped by backslash.

From reading this text passage, it is perfectly valid to assume that what I have assumed.
PHP Copyright © 2001-2022 The PHP Group
All rights reserved.
Last updated: Sat Jan 29 01:03:36 2022 UTC