|
użytkowników online: 15
|
OPINIE UŻYTKOWNIKÓW
|
W takich dniach, jak ten, nie żałuję, że wykupiłem abonament. Korzystam z porad na tych stronach nawet kilkanaście razy w tygodniu i dzięki nim prace nad stronami dla klientów idą mi o wiele szybciej, a strony wyglądają bardziej profesjonalnie. Nie wiem, jak mogłem wcześniej pracować bez dostępu do porad w tym serwisie!
Wojciech Miszkiewicz
|
|
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net
[Spis]
[A]
[B]
[C]
[D]
[E]
[F]
[G]
[H]
[I]
[J]
[K]
[L]
[M]
[N]
[O]
[P]
[Q]
[R]
[S]
[T]
[U]
[V]
[X]
[W]
[Z]
XCVI. Regular Expression Functions (Perl-Compatible)
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.
See Pattern Syntax
for detailed explanation.
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.
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.
PHP w wersji dla systemów
Windows posiada wbudowaną obsługę dla tego rozszerzenia. Nie trzeba ładować
żadnych dodatkowych rozszerzeń aby korzystać z tych funkcji. To rozszerzenie nie definiuje posiada żadnych
dyrektyw konfiguracyjnych w pliku php.ini. To rozszerzenie nie posiada żadnych rodzajów zasobów.
Poniższe stałe są zdefiniowane w tym rozszerzeniu i stają się dostępne, gdy
rozszerzenie jest dokompilowane do PHP, lub załadowane dynamicznie przy starcie.
Tabela 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 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 occurring match the appendant string
offset will also be returned. Note that this changes the return
values in an array where every element is an array consisting of the
matched string at offset 0 and its string offset within subject at
offset 1. This flag is available since PHP 4.3.0
and is only used for preg_split().
|
Przykład 1. Examples of valid patterns /<\/\w+>/ |(\d{3})-\d+|Sm /^(?i)php[34]/ {^\s+(\s+)?$}
|
Przykład 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 Notesalexbodn at 012 dot n@t dot il
09-Jan-2006 03:45
here is an annotation to my note from 28-Apr-2005 03:52, due to the welcome contribution of dipesh khakhkhar:
Here is a small function to determine whether a string is a preg expression.
Please note, that a dot '.' character in a regexp may match any character, including a dot, thus a string containing a dot may well be interpreted as an ordinary string, or a regexp.
function preg_ispreg($str)
{
$prefix = "";
$sufix = "";
if ($str[0] != '^')
$prefix = '^';
if ($str[strlen($str) - 1] != '$')
$sufix = '$';
$estr = preg_replace("'^/'", "\\/", preg_replace("'([^/])/'", "\\1\\/", $str));
if (@preg_match("/".$prefix.$estr.$sufix."/", $str, $matches))
return strcmp($str, $matches[0]) != 0;
return true;
}
richardh at phpguru dot org
22-Sep-2005 08:50
There's a printable PDF PCRE cheat sheet available here:
http://www.phpguru.org/article.php?ne_id=67
Has the common metacharacters, quantifiers, pattern modifiers, character classes and assertions with short explanations.
hfuecks at nospam dot org
04-Jul-2005 11:21
alexbodn at 012 dot n@t dot il
28-Apr-2005 03:52
Here is a small function to determine whether a string is a [valid] preg expression.
function preg_ispreg($str)
{
$prefix = "";
$sufix = "";
if ($str[0] != '^')
$prefix = '^';
if ($str[strlen($str) - 1] != '$')
$sufix = '$';
$estr = preg_replace("'^/'", "\\/", preg_replace("'([^/])/'", "\\1\\/", $str));
if (@preg_match("/".$prefix.$estr.$sufix."/", $str, $matches))
return strcmp($str, $matches[0]) != 0;
return false;
}
Ned Baldessin
24-Oct-2004 03:08
If you want to perform regular expressions on Unicode strings, the PCRE functions will NOT be of any help. You need to use the Multibyte extension : mb_ereg(), mb_eregi(), pb_ereg_replace() and so on. When doing so, be carefull to set the default text encoding to the same encoding used by the text you are searching and replacing in. You can do that with the mb_regex_encoding() function. You will probably also want to set the default encoding for the other mb_* string functions with mb_internal_encoding().
So when dealing with, say, french text, I start with these :
<?php
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
setlocale(LC_ALL, 'fr-fr');
?>
steve at stevedix dot de
20-Jul-2004 02:17
Something to bear in mind is that regex is actually a declarative programming language like prolog : your regex is a set of rules which the regex interpreter tries to match against a string. During this matching, the interpreter will assume certain things, and continue assuming them until it comes up against a failure to match, which then causes it to backtrack. Regex assumes "greedy matching" unless explicitly told not to, which can cause a lot of backtracking. A general rule of thumb is that the more backtracking, the slower the matching process.
It is therefore vital, if you are trying to optimise your program to run quickly (and if you can't do without regex), to optimise your regexes to match quickly.
I recommend the use of a tool such as "The Regex Coach" to debug your regex strings.
http://weitz.de/files/regex-coach.exe (Windows installer) http://weitz.de/files/regex-coach.tgz (Linux tar archive)
Snobord787 at msn dot com
14-Jan-2004 03:51
Biju
21-Sep-2003 06:00
hrz at geodata dot soton dot ac dot uk
06-Mar-2002 08: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:
http://www.pcre.org/man.txt
|