<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="../feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Susam's Perl Pages</title>
  <subtitle>Feed for Susam's Perl Pages</subtitle>
  <link href="https://susam.net/"/>
  <link href="https://susam.net/tag/perl.xml" rel="self"/>
  <id>https://susam.net/tag/perl.xml</id>
  <updated>2010-05-03T00:00:00Z</updated>
  <author><name>Susam Pal</name></author>
  <entry>
    <title>Zero Length Regular Expression</title>
    <link href="https://susam.net/zero-length-regular-expression.html"/>
    <id>urn:uuid:fd6a0f03-eb89-4f61-952f-8621ca13d8be</id>
    <updated>2010-05-03T00:00:00Z</updated>
    <content type="html">
<!-- BEGIN HTML -->
&lt;p&gt;
  This post presents a list of how zero length regular expression is
  handled in various tools and programming languages.  All of them
  compile the zero length regular expression pattern and the regular
  expression matches all strings.
&lt;/p&gt;
&lt;h2 id=&quot;gnu-grep&quot;&gt;GNU grep&lt;/h2&gt;
&lt;pre&gt;&lt;samp&gt;$ &lt;kbd&gt;printf &quot;foo\nbar\n&quot; | grep &quot;&quot;&lt;/kbd&gt;
foo
bar&lt;/samp&gt;&lt;/pre&gt;
&lt;h2 id=&quot;bsd-grep&quot;&gt;BSD grep&lt;/h2&gt;
&lt;pre&gt;&lt;samp&gt;$ &lt;kbd&gt;printf &quot;foo\nbar\n&quot; | grep &quot;&quot;&lt;/kbd&gt;
foo
bar&lt;/samp&gt;&lt;/pre&gt;
&lt;h2 id=&quot;perl&quot;&gt;Perl&lt;/h2&gt;
&lt;pre&gt;&lt;samp&gt;$ &lt;kbd&gt;perl -e &apos;print((&quot;foo&quot; =~ //) . &quot;\n&quot;)&apos;&lt;/kbd&gt;
1&lt;/samp&gt;&lt;/pre&gt;
&lt;h2 id=&quot;python&quot;&gt;Python&lt;/h2&gt;
&lt;pre&gt;&lt;samp&gt;$ &lt;kbd&gt;python&lt;/kbd&gt;
Python 2.5.2 (r252:60911, Jan  4 2009, 21:59:32)
[GCC 4.3.2] on linux2
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt; &lt;kbd&gt;import re; re.compile(&apos;&apos;).search(&apos;foo&apos;)&lt;/kbd&gt;
&amp;lt;_sre.SRE_Match object at 0x7fc6c5a2c510&amp;gt;&lt;/samp&gt;&lt;/pre&gt;
&lt;h2 id=&quot;java&quot;&gt;Java&lt;/h2&gt;
&lt;pre&gt;&lt;samp&gt;$ &lt;kbd&gt;cat RegexExperiment.java&lt;/kbd&gt;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexExperiment
{
    public static void main(String[] args)
    {
        System.out.println(Pattern.compile(&quot;&quot;).matcher(&quot;foo&quot;).find());
    }
}
$ &lt;kbd&gt;javac RegexExperiment.java &amp;amp;&amp;amp; java RegexExperiment&lt;/kbd&gt;
true&lt;/samp&gt;&lt;/pre&gt;
&lt;h2 id=&quot;mzscheme&quot;&gt;MzScheme&lt;/h2&gt;
&lt;pre&gt;&lt;samp&gt;$ &lt;kbd&gt;mzscheme&lt;/kbd&gt;
Welcome to MzScheme v4.0.1 [3m], Copyright (c) 2004-2008 PLT Scheme Inc.
&amp;gt; &lt;kbd&gt;(regexp-match &quot;&quot; &quot;foo&quot;)&lt;/kbd&gt;
(&quot;&quot;)&lt;/samp&gt;&lt;/pre&gt;
&lt;h2 id=&quot;clisp&quot;&gt;CLISP&lt;/h2&gt;
&lt;pre&gt;&lt;samp&gt;$ &lt;kbd&gt;clisp&lt;/kbd&gt;
  i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
  I I I I I I I      8     8   8           8     8     o  8    8
  I  \ `+&apos; /  I      8         8           8     8        8    8
   \  `-+-&apos;  /       8         8           8      ooooo   8oooo
    `-__|__-&apos;        8         8           8           8  8
        |            8     o   8           8     o     8  8
  ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8

Welcome to GNU CLISP 2.44.1 (2008-02-23) &amp;lt;http://clisp.cons.org/&amp;gt;

Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2008

Type :h and hit Enter for context help.

[1]&amp;gt; &lt;kbd&gt;(regexp:match &quot;&quot; &quot;foo&quot;)&lt;/kbd&gt;
#S(REGEXP:MATCH :START 0 :END 0)&lt;/samp&gt;&lt;/pre&gt;
&lt;h2 id=&quot;c&quot;&gt;C&lt;/h2&gt;
&lt;pre&gt;&lt;samp&gt;$ &lt;kbd&gt;ls -l /usr/lib/libpcre.so*&lt;/kbd&gt;
lrwxrwxrwx 1 root root     17 May  3 15:15 /usr/lib/libpcre.so -&amp;gt; libpcre.so.3.12.1
lrwxrwxrwx 1 root root     17 Jan  6 14:57 /usr/lib/libpcre.so.3 -&amp;gt; libpcre.so.3.12.1
-rw-r--r-- 1 root root 162816 Jul 14  2008 /usr/lib/libpcre.so.3.12.1
susam@swift:~$ &lt;kbd&gt;cat pcre.c&lt;/kbd&gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;pcre.h&amp;gt;

#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;pcre.h&amp;gt;

int main(int argc, char **argv)
{
    pcre *p;
    char *re = &quot;&quot;;
    char *s  = &quot;foo&quot;;
    const char *errmsg;
    int errpos;
    int ovector[10];
    int ret;

    p = pcre_compile(re, 0, &amp;amp;errmsg, &amp;amp;errpos, NULL);
    ret = pcre_exec(p, NULL, s, strlen(s), 0, 0,
                    ovector, sizeof ovector / sizeof *ovector);

    printf(ret &amp;lt; 0 ? &quot;no match\n&quot; : &quot;match\n&quot;);
}
$ &lt;kbd&gt;cc -lpcre pcre.c &amp;amp;&amp;amp; ./a.out&lt;/kbd&gt;
match&lt;/samp&gt;&lt;/pre&gt;
<!-- ### -->
&lt;p&gt;
  &lt;a href="https://susam.net/zero-length-regular-expression.html"&gt;Read on website&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/perl.html&quot;&gt;#perl&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/python.html&quot;&gt;#python&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/java.html&quot;&gt;#java&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/lisp.html&quot;&gt;#lisp&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/programming.html&quot;&gt;#programming&lt;/a&gt; |
  &lt;a href=&quot;https://susam.net/tag/technology.html&quot;&gt;#technology&lt;/a&gt;
&lt;/p&gt;
<!-- END HTML -->
    </content>
  </entry>
</feed>
