downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Our source is open

The syntax highlighted source is automatically generated by PHP from the plaintext script. If you're interested in what's behind the several functions we used, you can always take a look at the source of the following files:

Of course, if you want to see the source of this page, we have it available. You can also browse the SVN repository for this website on svn.php.net.

Source of: /manual/en/regexp.reference.backslash.php

<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$PARENTS = array();
include_once
dirname(__FILE__) ."/toc/reference.pcre.pattern.syntax.inc";
$setup = array (
 
'home' =>
  array (
   
0 => 'index.php',
   
1 => 'PHP Manual',
  ),
 
'head' =>
  array (
   
0 => 'UTF-8',
   
1 => 'en',
  ),
 
'this' =>
  array (
   
0 => 'regexp.reference.backslash.php',
   
1 => 'Backslash',
  ),
 
'up' =>
  array (
   
0 => 'reference.pcre.pattern.syntax.php',
   
1 => 'Pattern Syntax',
  ),
 
'prev' =>
  array (
   
0 => 'regexp.reference.meta.php',
   
1 => 'Meta-characters',
  ),
 
'next' =>
  array (
   
0 => 'regexp.reference.unicode.php',
   
1 => 'Unicode character properties',
  ),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);

manual_header();
?>
<div id="regexp.reference.backslash" class="section">
     <h2 class="title">Backslash</h2>
     <p class="para">
      The backslash character has several uses. Firstly, if it  is
      followed by a non-alphanumeric character, it takes away any
      special  meaning that character may have. This use of
      backslash as an escape character applies both inside and
      outside character classes.
     </p>
     <p class="para">
      For example, if you want to match a &quot;*&quot; character, you write
      &quot;\*&quot; in the pattern. This applies whether or not the
      following character would otherwise be interpreted as a
      meta-character, so it is always safe to precede a non-alphanumeric
      with &quot;\&quot; to specify that it stands for itself.  In
      particular, if you want to match a backslash, you write &quot;\\&quot;.
     </p>
     <blockquote><p><b class="note">Note</b>:
     
       Single and double quoted PHP <a href="language.types.string.php#language.types.string.syntax" class="link">strings</a> have special
       meaning of backslash. Thus if \ has to be matched with a regular
       expression \\, then &quot;\\\\&quot; or &#039;\\\\&#039; must be used in PHP code.
      <br />
     </p></blockquote>
     <p class="para">
      If a pattern is compiled with the
      <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_EXTENDED</a> option,
      whitespace in the pattern (other than in a character class) and
      characters between a &quot;#&quot; outside a character class and the next newline
      character are ignored. An escaping backslash can be used to include a
      whitespace or &quot;#&quot; character as part of the pattern.
     </p>
     <p class="para">
      A second use of backslash provides a way of encoding
      non-printing characters in patterns in a visible manner. There
      is no restriction on the appearance of non-printing  characters,
      apart from the binary zero that terminates a pattern,
      but when a pattern is being prepared by text editing, it is
      usually  easier to use one of the following escape sequences
      than the binary character it represents:
     </p>
     <p class="para">
      </p><dl>

       <dt class="varlistentry">

        <span class="term"><em class="emphasis">\a</em></span>

        </dt><dd class="listitem">
<span class="simpara">alarm, that is, the BEL character (hex 07)</span></dd>

      
       <dt class="varlistentry">

        <span class="term"><em class="emphasis">\cx</em></span>

        </dt><dd class="listitem">
<span class="simpara">&quot;control-x&quot;, where x is any character</span></dd>

      
       <dt class="varlistentry">

        <span class="term"><em class="emphasis">\e</em></span>

        </dt><dd class="listitem">
<span class="simpara">escape (hex 1B)</span></dd>

      
       <dt class="varlistentry">

        <span class="term"><em class="emphasis">\f</em></span>

        </dt><dd class="listitem">
<span class="simpara">formfeed (hex 0C)</span></dd>

      
       <dt class="varlistentry">

        <span class="term"><em class="emphasis">\n</em></span>

        </dt><dd class="listitem">
<span class="simpara">newline (hex 0A)</span></dd>

      
       <dt class="varlistentry">

        <span class="term"><em class="emphasis">\r</em></span>

        </dt><dd class="listitem">
<span class="simpara">carriage return (hex 0D)</span></dd>

      
       <dt class="varlistentry">

        <span class="term"><em class="emphasis">\t</em></span>

        </dt><dd class="listitem">
<span class="simpara">tab (hex 09)</span></dd>

      
       <dt class="varlistentry">

        <span class="term"><em class="emphasis">\xhh</em></span>

        </dt><dd class="listitem">
<span class="simpara">character with hex code hh</span></dd>

      
       <dt class="varlistentry">

        <span class="term"><em class="emphasis">\ddd</em></span>

        </dt><dd class="listitem">
<span class="simpara">character with octal code ddd, or backreference</span></dd>

      
      </dl>
<p>
     </p>
    <p class="para">
     The precise effect of &quot;<i>\cx</i>&quot; is as follows:
     if &quot;<i>x</i>&quot; is a lower case  letter, it is converted
     to upper case. Then bit 6 of the character (hex 40) is inverted.
     Thus &quot;<i>\cz</i>&quot; becomes  hex 1A, but
     &quot;<i>\c{</i>&quot; becomes hex 3B, while &quot;<i>\c;</i>&quot;
     becomes hex 7B.
    </p>
    <p class="para">
     After &quot;<i>\x</i>&quot;, up to two hexadecimal digits are
     read (letters can be in upper or lower case).
     In <em class="emphasis">UTF-8 mode</em>, &quot;<i>\x{...}</i>&quot; is
     allowed, where the contents of the braces is a string of hexadecimal
     digits. It is interpreted as a UTF-8 character whose code number is the
     given hexadecimal number. The original hexadecimal escape sequence,
     <i>\xhh</i>, matches a two-byte UTF-8 character if the value
     is greater than 127.
    </p>
    <p class="para">
     After &quot;<i>\0</i>&quot; up to two further octal digits are read.
     In  both cases,  if  there are fewer than two digits, just those that
     are present are used. Thus the sequence &quot;<i>\0\x\07</i>&quot;
     specifies two binary zeros followed by a BEL character. Make sure you
     supply two digits after the initial zero if the character
     that follows is itself an octal digit.
    </p>
    <p class="para">
     The handling of a backslash followed by a digit other than 0
     is complicated. Outside a character class, PCRE reads it
     and any following digits as a decimal number. If the  number
     is  less  than  10, or if there have been at least that many
     previous capturing left parentheses in the  expression,  the
     entire  sequence is taken as a <em class="emphasis">back reference</em>. A description
     of how this works is given later, following  the  discussion
     of parenthesized subpatterns.
    </p>
    <p class="para">
     Inside a character  class,  or  if  the  decimal  number  is
     greater than 9 and there have not been that many capturing
     subpatterns, PCRE re-reads up to three octal digits following
     the backslash, and generates a single byte from the
     least significant 8 bits of the value. Any subsequent digits
     stand for themselves.  For example:
    </p>
    <p class="para">
     </p><dl>

      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\040</em></span>

       </dt><dd class="listitem">
<span class="simpara">is another way of writing a space</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\40</em></span>

       </dt><dd class="listitem">

        <span class="simpara">
         is the same, provided there are fewer than 40
         previous capturing subpatterns
        </span>
       </dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\7</em></span>

       </dt><dd class="listitem">
<span class="simpara">is always a back reference</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\11</em></span>

       </dt><dd class="listitem">

        <span class="simpara">
         might be a back reference, or another way of
         writing a tab
        </span>
       </dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\011</em></span>

       </dt><dd class="listitem">
<span class="simpara">is always a tab</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\0113</em></span>

       </dt><dd class="listitem">
<span class="simpara">is a tab followed by the character &quot;3&quot;</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\113</em></span>

       </dt><dd class="listitem">

        <span class="simpara">
         is the character with octal code 113 (since there
         can be no more than 99 back references)
        </span>
       </dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\377</em></span>

       </dt><dd class="listitem">
<span class="simpara">is a byte consisting entirely of 1 bits</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\81</em></span>

       </dt><dd class="listitem">

        <span class="simpara">
         is either a back reference, or a binary zero
         followed by the two characters &quot;8&quot; and &quot;1&quot;
        </span>
       </dd>

     
     </dl>
<p>
    </p>
    <p class="para">
     Note that octal values of 100 or greater must not be
     introduced by a leading zero, because no more than three octal
     digits are ever read.
    </p>
    <p class="para">
     All the sequences that define a single byte value can  be
     used both inside and outside character classes. In addition,
     inside a character class, the sequence &quot;<i>\b</i>&quot;
     is interpreted as the backspace character (hex 08). Outside a character
     class it has a different meaning (see below).
    </p>
    <p class="para">
     The third use of backslash is for specifying generic
     character types:
    </p>
    <p class="para">
     </p><dl>

      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\d</em></span>

       </dt><dd class="listitem">
<span class="simpara">any decimal digit</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\D</em></span>

       </dt><dd class="listitem">
<span class="simpara">any character that is not a decimal digit</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\h</em></span>

       </dt><dd class="listitem">
<span class="simpara">any horizontal whitespace character (since PHP 5.2.4)</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\H</em></span>

       </dt><dd class="listitem">
<span class="simpara">any character that is not a horizontal whitespace character (since PHP 5.2.4)</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\s</em></span>

       </dt><dd class="listitem">
<span class="simpara">any whitespace character</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\S</em></span>

       </dt><dd class="listitem">
<span class="simpara">any character that is not a whitespace character</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\v</em></span>

       </dt><dd class="listitem">
<span class="simpara">any vertical whitespace character (since PHP 5.2.4)</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\V</em></span>

       </dt><dd class="listitem">
<span class="simpara">any character that is not a vertical whitespace character (since PHP 5.2.4)</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\w</em></span>

       </dt><dd class="listitem">
<span class="simpara">any &quot;word&quot; character</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\W</em></span>

       </dt><dd class="listitem">
<span class="simpara">any &quot;non-word&quot; character</span></dd>

     
     </dl>
<p>
    </p>
    <p class="para">
     Each pair of escape sequences partitions the complete set of
     characters into two disjoint sets. Any given character
     matches one, and only one, of each pair.
    </p>
    <p class="para">
     A &quot;word&quot; character is any letter or digit or the underscore
     character,  that  is,  any  character which can be part of a
     Perl &quot;<em class="emphasis">word</em>&quot;. The definition of letters and digits is 
     controlled by PCRE&#039;s character tables, and may vary if locale-specific
     matching is taking place. For example, in the &quot;fr&quot; (French) locale, some
     character codes greater than 128 are used for accented letters,
     and these are matched by <i>\w</i>.
    </p>
    <p class="para">
     These character type sequences can appear both inside and
     outside  character classes. They each match one character of
     the appropriate type. If the current matching  point is at
     the end of the subject string, all of them fail, since there
     is no character to match.
    </p>
    <p class="para">
     The fourth use of backslash is  for  certain  simple
     assertions. An assertion specifies a condition that has to be met
     at a particular point in  a match, without consuming any
     characters from the subject string. The use of subpatterns
     for more complicated assertions is described below. The
     backslashed assertions are
    </p>
    <p class="para">
     </p><dl>

      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\b</em></span>

       </dt><dd class="listitem">
<span class="simpara">word boundary</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\B</em></span>

       </dt><dd class="listitem">
<span class="simpara">not a word boundary</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\A</em></span>

       </dt><dd class="listitem">
<span class="simpara">start of subject (independent of multiline mode)</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\Z</em></span>

       </dt><dd class="listitem">

        <span class="simpara">
         end of subject or newline at end (independent of
         multiline mode)
        </span>
       </dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\z</em></span>

       </dt><dd class="listitem">
<span class="simpara">end of subject (independent of multiline mode)</span></dd>

     
      <dt class="varlistentry">

       <span class="term"><em class="emphasis">\G</em></span>

       </dt><dd class="listitem">
<span class="simpara">first matching position in subject</span></dd>

     
     </dl>
<p>
    </p>
    <p class="para">
     These assertions may not appear in  character  classes  (but
     note that &quot;<i>\b</i>&quot; has a different meaning, namely the backspace
     character, inside a character class).
    </p>
    <p class="para">
     A word boundary is a position in the subject string where
     the current character and the previous character do not both
     match <i>\w</i> or <i>\W</i> (i.e. one matches
     <i>\w</i> and  the  other  matches
     <i>\W</i>), or the start or end of the string if the first
     or last character matches <i>\w</i>, respectively.
    </p>
    <p class="para">
     The <i>\A</i>, <i>\Z</i>, and
     <i>\z</i> assertions differ  from  the  traditional
     circumflex  and  dollar  (described below) in that they only
     ever match at the very start and end of the subject  string,
     whatever  options  are  set.  They  are  not affected by the
     <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_MULTILINE</a> or
     <a href="reference.pcre.pattern.modifiers.php" class="link">PCRE_DOLLAR_ENDONLY</a>
     options. The  difference  between <i>\Z</i> and
     <i>\z</i>  is that <i>\Z</i> matches before a
     newline that is the last character of the string as well as at the end of
     the string, whereas <i>\z</i> matches only at the end.
     </p>
     <p class="para">
      The <i>\G</i> assertion is true only when the current
      matching position is at the start point of the match, as specified by
      the <i><tt class="parameter">offset</tt></i>
 argument of
      <a href="function.preg-match.php" class="function">preg_match()</a>. It differs from <i>\A</i>
      when the value of <i><tt class="parameter">offset</tt></i>
 is non-zero.
      It is available since PHP 4.3.3.
     </p>
    
     <p class="para">
      <i>\Q</i> and <i>\E</i> can be used to ignore
      regexp metacharacters in the pattern since PHP 4.3.3. For example:
      <i>\w+\Q.$.\E$</i> will match one or more word characters,
      followed by literals <i>.$.</i> and anchored at the end of
      the string.
     </p>
    
     <p class="para">
      <i>\K</i> can be used to reset the match start since
      PHP 5.2.4. For example, the pattern <i>foo\Kbar</i> matches
      &quot;foobar&quot;, but reports that it has matched &quot;bar&quot;. The use of
      <i>\K</i> does not interfere with the setting of captured
      substrings. For example, when the pattern <i>(foo)\Kbar</i>
      matches &quot;foobar&quot;, the first substring is still set to &quot;foo&quot;.
     </p>
    
    </div><?php manual_footer(); ?>
 
show source | credits | sitemap | contact | advertising | mirror sites