Difference between revisions of "Perl regex"

from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
Jump to navigation Jump to search
(→‎Details: () replacement vars; formatter)
(→‎Examples: more examples; fixed error in first example)
Line 6: Line 6:
 
==Details==
 
==Details==
 
Special characters in regex:
 
Special characters in regex:
* '''.''' = any character
+
* . = any character
* '''*''' = 0 or more of previous character
+
* * = 0 or more of previous character
* '''^''' = following string begins the line (except [^...] means "not these characters")
+
* ^ = following string begins the line (except [^...] means "not these characters")
* '''$''' = preceding string ends the line
+
* $ = preceding string ends the line
* '''[]''' = list of characters which can satisfy the match at this position
+
* [] = list of characters which can satisfy the match at this position
* '''{}''' = # of repetitions of previous character
+
* {} = # of repetitions of previous character
* '''()''' = part of input string to be plugged into variables ($1, $2, etc.)
+
* | = alternatives
* '''|''' = alternatives
+
* + = 1 or more of previous character
* '''+''' = 1 or more of previous character
+
* ''a''-''b'' = range of characters from ''a'' to ''b'' (must be inside [] to be position-sensitive?)
* ''a'' - ''b'' = range of characters from ''a'' to ''b'' (must be inside [] to be position-sensitive?)
 
 
 
Replacement variables generated by () are
 
* automatically numbered beginning with $1
 
* not local to the regex statement (i.e. they are available in subsequent lines of code)
 
  
 
Operators used to invoke regex:
 
Operators used to invoke regex:
* '''=~''' returns TRUE if pattern matches
+
* =~ returns TRUE if pattern matches
* '''!~''' returns FALSE if pattern matches
+
* !~ returns FALSE if pattern matches
* '''s/'''<u>pattern</u>'''/'''<u>replacement</u>'''/''' replaces <u>pattern</u> with <u>replacement</u>
+
* s/''pattern''/''replacement''/ replaces ''pattern'' with ''replacement''
 
 
 
==Examples==
 
==Examples==
 
* Replace "thingy" with "stuffs" in $string:
 
* Replace "thingy" with "stuffs" in $string:
** $string = s/thingy/stuffs/;
+
** $string =~ s/thingy/stuffs/;
 +
* Keep only the part of $string before the final "/" (using "|" as the delimiter instead of "/"):
 +
** $string =~ s|(.*)/[^/]*|$1|;
 +
* ...before the final "-":
 +
** $string =~ s|(.*)-[^-]*|$1|;
 +
* ...before the final ".":
 +
** $string =~ s|(.*)\.[^\.]*|$1|;
 +
* ...''after'' the final "."
 +
** $string =~ s|^.+\.(.+$)|$1|;

Revision as of 19:22, 3 March 2006

Computing: Programming: Perl: regex

This article explains regular expressions in terms understandable to mere mortals, and also how to use them in Perl.

Related Articles

  • regex: manpage documentation

Details

Special characters in regex:

  • . = any character
  • * = 0 or more of previous character
  • ^ = following string begins the line (except [^...] means "not these characters")
  • $ = preceding string ends the line
  • [] = list of characters which can satisfy the match at this position
  • {} = # of repetitions of previous character
  • | = alternatives
  • + = 1 or more of previous character
  • a-b = range of characters from a to b (must be inside [] to be position-sensitive?)

Operators used to invoke regex:

  • =~ returns TRUE if pattern matches
  • !~ returns FALSE if pattern matches
  • s/pattern/replacement/ replaces pattern with replacement

Examples

  • Replace "thingy" with "stuffs" in $string:
    • $string =~ s/thingy/stuffs/;
  • Keep only the part of $string before the final "/" (using "|" as the delimiter instead of "/"):
    • $string =~ s|(.*)/[^/]*|$1|;
  • ...before the final "-":
    • $string =~ s|(.*)-[^-]*|$1|;
  • ...before the final ".":
    • $string =~ s|(.*)\.[^\.]*|$1|;
  • ...after the final "."
    • $string =~ s|^.+\.(.+$)|$1|;