|
|
LXXXVIII. Regular Expression Functions (Perl-Compatible)Introduction
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. Since PHP 4.0.4, you can also use
Perl-style (), {}, [], and <> matching delimiters.
The ending delimiter may be followed by various modifiers that
affect the matching.
See Pattern Modifiers.
PHP also supports regular expressions using a POSIX-extended syntax
using the POSIX-extended regex functions..
Requirements
Regular expression support is provided by the PCRE library
package, which is open source software, written by Philip Hazel,
and copyright by the University of Cambridge, England. It is
available at .
Installation
Beginning with PHP 4.2.0 these functions are enabled by default. You can
disable the pcre functions with
--without-pcre-regex. Use
--with-pcre-regex=DIR to specify DIR
where PCRE's include and library files are located, if not using bundled library.
For older versions you have to configure and compile PHP
with --with-pcre-regex[=DIR] in order
to use these functions.
The windows version of PHP
has built in support for this extension. You do not need to load any additional
extension in order to use these functions. Runtime ConfigurationThis extension has no configuration directives defined in php.ini. Resource TypesThis extension has no resource types defined. Predefined Constants
The constants below are defined by this extension, and
will only be available when the extension has either
been compiled into PHP or dynamically loaded at runtime.
표 1. PREG constants constant | description |
---|
PREG_PATTERN_ORDER |
Orders results so that $matches[0] is an array of full pattern
matches, $matches[1] is an array of strings matched by the first
parenthesized subpattern, and so on. This flag is only used with
preg_match_all().
| PREG_SET_ORDER |
Orders results so that $matches[0] is an array of first set of
matches, $matches[1] is an array of second set of matches, and so
on. This flag is only used with preg_match_all().
| PREG_OFFSET_CAPTURE |
See the description of
PREG_SPLIT_OFFSET_CAPTURE. This flag is
available since PHP 4.3.0 .
| PREG_SPLIT_NO_EMPTY |
This flag tells preg_split() to only return only
non-empty pieces.
| PREG_SPLIT_DELIM_CAPTURE |
This flag tells preg_split() to capture
parenthesized expression in the delimiter pattern as well. This flag
is available since PHP 4.0.5 .
| PREG_SPLIT_OFFSET_CAPTURE |
If this flag is set, for every occuring match the appendant string
offset will also be returned. Note that this changes the return
value in an array where very element is an array consisting of the
matched string at offset 0 and it's string offset into subject at
offset 1. This flag is available since PHP 4.3.0
and is only used for preg_split().
|
Examples
예 1. Examples of valid patterns /<\/\w+>/ |(\d{3})-\d+|Sm /^(?i)php[34]/ {^\s+(\s+)?$}
|
예 2. Examples of invalid patterns
/href='(.*)' - missing ending delimiter
/\w+\s*\w+/J - unknown modifier 'J'
1-\d3-\d3-\d4| - missing starting delimiter
|
User Contributed Notes Regular Expression Functions (Perl-Compatible) |
add a note |
arpadffy at polarfox dot com
14-Jul-2000 05:59 |
|
... so I find the solution for PCRE under Linux. Download the source code.
Compile it with --with-pcre-regexmake parameter. It's working just fine
with PHP 4.0.1pl2. One more time I learned: the safest (and the fastest)
way is build your own code from the source. :-)
|
|
jensaxel at soegaard dot net
24-Jul-2000 10:13 |
|
Please add a link from the ordinary regular expressions to these. Otherwise
they are easy to miss, when looking for regex functions, due the
abreviation.
|
|
bigfart at asia dot com
12-Mar-2001 11:09 |
|
Ever wondered how to use a function within a PCRE? here's
how:
$content = preg_replace("/\*(\w+)\*/e",
"lookupImageCode($1)", $content);
This code replaces
all instances of *text*, where text is a code for an image, with the
output of function lookupImageCode(). The /e and the quotes around the
function name and arguments are essential to make this work :-)
I
use this on one of my websites to query a database and cross-reference
image filenames with special codes input by press release writers in our
client's company. They type the code of an image (displayed in a
catalogue onscreen on the site's backend) and this little wonder of code
changes it to an img src tag on the fly as the page is
loaded.
Enjoy!
p.s. thanks to the guys on #php who
helped sort this out at 4am in the morning my time! (donut, jfk, cardinal)
Contact me if you like.
|
|
gilh at mudbuginfo dot com
22-Aug-2001 01:09 |
|
There is some really good/simple documentation of Perl regular expressions
at
|
|
hrz at geodata dot soton dot ac dot uk
06-Mar-2002 06:33 |
|
If you're venturing into new regular expression territory with a lack of
useful examples then it would pay to get familiar with this
page:
|
|
clay at killersoft dot com
12-Mar-2002 07:56 |
|
Here's a translation of Friedl's email address matching regexp:
Friedl's
perl original is available here:
|
|
superzouz at hotmail dot com
14-Jun-2002 04:47 |
|
This is the easiest tutorial for regular expressions I have found
yet. Beginners should start here. This tutorial is originally
written for Jscript, but I think everything applies to PHP. (I had to
chop the following url into small pieces to be able to post it
here)
script56/html/js56reconRegularExpressions.asp
|
|
kingn at oclc dot org
31-Jul-2002 06:18 |
|
Back References should be escaped: such as \\1 \\2
Example:
preg_match("/<(\w+)(.*?)>(.+)<\/\\1>/s", $data,
$regs);
This attempts to parse XML/HTML like data...
Where: $regs[1] is the tag name $regs[2] are any tag
properties $regs[3] is the data within the tag
This handles the
base case for an algorithm that could parse an entire XML form
recursively.
|
|
mrPuta at yahoo dot com dot au
19-May-2003 04:42 |
|
How to have optional spaces. For beginners like me. I finally found the
solution. I need this so a surname like mine will 'match'. eg. 'De
David'
<?function eregi_alpha_sp( $data ) { if (
eregi('^[[:alpha:]| ]+$', $data) ) {return true;} return false;
}?>
The spaces bit, is '| ]'. The 'pipe' meaning OR and a
space. So, the expression is Alpha OR Space
|
|
add a note |
| |