Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

comparison table for emacs regexp and perl compatible regular expression (PCRE)?

Tags:

Is there a nice table or a cheatsheet on the web that compares the sytax of emacs regex and PCRE?

That I have to remember to escape grouping parenthesis and braces and other differences when I'm using emacs regex, it's all confusing, a syntax comparison table would be good for minimizing confusion.

like image 796
Yoo Avatar asked Dec 22 '09 13:12

Yoo


People also ask

Does Perl use Pcre?

As of Perl 5.10, PCRE is also available as a replacement for Perl's default regular-expression engine through the re::engine::PCRE module. The library can be built on Unix, Windows, and several other environments.

What is Pcre matching?

PCRE tries to match Perl syntax and semantics as closely as it can. PCRE also supports some alternative regular expression syntax (which does not conflict with the Perl syntax) in order to provide some compatibility with regular expressions in Python, .

Is grep a Pcre?

grep understands three different versions of regular expression syntax: basic (BRE), extended (ERE), and Perl-compatible (PCRE). In GNU grep , there is no difference in available functionality between the basic and extended syntaxes.


2 Answers

I will collect syntax differences that I know here. This answer is community wiki, add more if anyone wishes. Always check the preview before adding more.

When to escape ( ) { } |

In Emacs regexp, (, ), {, }, | are literal and escaped ones (\(, \), \{, \}, \|) are meta.

In Perl-compatible regexp, (, ), {, }, | are meta, and escaped ones are literal.

* and +

\* is the literal star in both Emacs and Perl. If an expression starts with a star, the starting star is literal in Emacs regexp, illegal in Perl regexp.

Similarly for the plus.

Character classes

The character classes \d (for digits), \w (for words), \s (for whitespace characters) do not work in Emacs regular expressions, but work in Perl. In Emacs, use [[:digit:]], [[:word:]], [[:space:]] instead (with double brackets). In Perl, they are also [:digit:], [:word:], [:space:] (single brackets).

\w in Emacs matches ' and " too, unlike Perl. This is because text-mode syntax table has ' and " as word characters.

Backslash constructs

Of backslash constructs mentioned in Emacs Regexp Backslash, the following constructs are NOT in Perl compatible regular expressions.

\` \' \= \< \> \_< \_> \sC \cC

See also what < and > can do that \b cannot do

\A, \Z, \z are NOT in Emacs. In Emacs, use instead:

\` or \'

Complications regarding newlines and interactive usage

See the second section in Text Pattern Matching in Emacs. It also mentions why \n and \t don't match newlines and tabs in incremental search forward for regular expression (C-M-s or M-x isearch-forward-regexp) and what to do.

Etc

Emacswiki regular expression

like image 99
5 revs Avatar answered Oct 09 '22 14:10

5 revs


I think you're looking for http://www.regular-expressions.info/refflavors.html

Emacs's regexes are "GNU ERE" in those tables.

like image 26
Tim Pietzcker Avatar answered Oct 09 '22 15:10

Tim Pietzcker