(PHP 4, PHP 5)
preg_match — Perform a regular expression match
$pattern
, string $subject
[, array &$matches
[, int $flags
= 0
[, int $offset
= 0
]]] )
Searches subject
for a match to the regular
expression given in pattern
.
pattern
The pattern to search for, as a string.
subject
The input string.
matches
If matches
is provided, then it is filled with
the results of search. $matches[0] will contain the
text that matched the full pattern, $matches[1]
will have the text that matched the first captured parenthesized
subpattern, and so on.
flags
flags
can be the following flag:
PREG_OFFSET_CAPTURE
matches
into an array where every element is an
array consisting of the matched string at offset 0
and its string offset into subject
at offset
1.
offset
Normally, the search starts from the beginning of the subject string.
The optional parameter offset
can be used to
specify the alternate place from which to start the search (in bytes).
Informacja:
Using
offset
is not equivalent to passing substr($subject, $offset) to preg_match() in place of the subject string, becausepattern
can contain assertions such as ^, $ or (?<=x). Compare:<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
?>Powyższy przykład wyświetli:
Array ( )while this example
<?php
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>will produce
Array ( [0] => Array ( [0] => def [1] => 0 ) )
preg_match() returns 1 if the pattern
matches given subject
, 0 if it does not, or FALSE
if an error occurred.
Ta funkcja może
zwrócić Boolean FALSE
, ale może też zwrócić wartość innego typu niż Boolean, która oznacza
wartość FALSE
, takie jak 0 lub
"". Aby uzyskać więcej informacji proszę zapoznać się z rozdziałem Typy logiczne.
Można używać operatora ===
do testowania zwracanych wartości przez tę
funkcję.
Wersja | Opis |
---|---|
5.3.6 |
Returns FALSE if offset is higher than
subject length.
|
5.2.2 | Named subpatterns now accept the syntax (?<name>) and (?'name') as well as (?P<name>). Previous versions accepted only (?P<name>). |
4.3.3 |
The offset parameter was added
|
4.3.0 |
The PREG_OFFSET_CAPTURE flag was added
|
4.3.0 |
The flags parameter was added
|
Przykład #1 Find the string of text "php"
<?php
// The "i" after the pattern delimiter indicates a case-insensitive search
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
?>
Przykład #2 Find the word "web"
<?php
/* The \b in the pattern indicates a word boundary, so only the distinct
* word "web" is matched, and not a word partial like "webbing" or "cobweb" */
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
echo "A match was found.";
} else {
echo "A match was not found.";
}
?>
Przykład #3 Getting the domain name out of a URL
<?php
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $matches);
$host = $matches[1];
// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>
Powyższy przykład wyświetli:
domain name is: php.net
Przykład #4 Using named subpattern
<?php
$str = 'foobar: 2008';
preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);
/* This also works in PHP 5.2.2 (PCRE 7.0) and later, however
* the above form is recommended for backwards compatibility */
// preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);
print_r($matches);
?>
Powyższy przykład wyświetli:
Array ( [0] => foobar: 2008 [name] => foobar [1] => foobar [digit] => 2008 [2] => 2008 )