CakeFest 2024: The Official CakePHP Conference

preg_filter

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

preg_filterSucht und ersetzt mit regulären Ausdrücken

Beschreibung

preg_filter(
    string|array $pattern,
    string|array $replacement,
    string|array $subject,
    int $limit = -1,
    int &$count = null
): string|array|null

Davon abgesehen, dass preg_filter() bei Übereinstimmungen die (möglicherweise umgewandelten) Zeichenketten nur zurückgibt, ist sie mit preg_replace() identisch. Details über die Funktionsweise dieser Funktion sind in in der Dokumentation zu preg_replace() zu finden.

Parameter-Liste

Die Parameter sind in der Dokumentation zu preg_replace() beschrieben.

Rückgabewerte

Gibt ein Array zurück, falls subject ein Array ist, andernfalls eine Zeichenkette.

Falls keine Übereinstimmungen gefunden wurden oder ein Fehler auftrat, wird ein leeres Array zurückgegeben, wenn subject ein Array ist, andernfalls null.

Fehler/Exceptions

Wenn das übergebene Regex-Muster nicht zu einem gültigen Regex kompiliert werden kann, wird ein Fehler der Stufe E_WARNING ausgegeben.

Beispiele

Beispiel #1 Beispiel zum Vergleich von preg_filter() und preg_replace()

<?php
$zeichenkette
= array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$suchmuster = array('/\d/', '/[a-z]/', '/[1a]/');
$ersatz = array('A:$0', 'B:$0', 'C:$0');

echo
"preg_filter liefert\n";
print_r(preg_filter($suchmuster, $ersatz, $zeichenkette));

echo
"preg_replace liefert\n";
print_r(preg_replace($suchmuster, $ersatz, $zeichenkette));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

preg_filter liefert
Array
(
    [0] => A:C:1
    [1] => B:C:a
    [2] => A:2
    [3] => B:b
    [4] => A:3
    [7] => A:4
)
preg_replace liefert
Array
(
    [0] => A:C:1
    [1] => B:C:a
    [2] => A:2
    [3] => B:b
    [4] => A:3
    [5] => A
    [6] => B
    [7] => A:4
)

Siehe auch

add a note

User Contributed Notes 6 notes

up
9
forsoap at gmail dot com
7 years ago
For those who read manual not in English and figure out that example code returns not the same result as in documentation

You need put in example patter modifier "u" to get same result:

<?php
$subject
= array('1', 'а', '2', 'б', '3', 'А', 'Б', '4');
// Added "u"
$pattern = array('/\d/u', '/[а-я]/u', '/[1а]/u');
$replace = array('А:$0', 'Б:$0', 'В:$0');
?>
up
7
bienvenunet at yahoo dot com
6 years ago
If you don't want to actually replace the matches, just filter the array to them, make the replacement parameter '$0'.

<?php
$subject
= array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$result = preg_filter('/\d/', '$0', $subject); // ['1','2','3','4']
?>
up
2
sajina_99 at hotmail dot de
12 years ago
As I had to work with PHP5.2.X and needed preg_filter I wrote a quick and dirty workaround.

<?php
if (!function_exists('preg_filter')) {

function
preg_filter($pattern, $replace, $subject, $limit = -1 , &$count = null) {

if(!
is_array($subject)) {
$noArray = 1 ;
$subject = array($subject);
}

$preg = preg_replace($pattern, $replace, $subject, $limit, &$count);

$diff = array_diff($preg, $subject);

if(
$noArray == 1) $diff = implode($diff) ;

return
$diff ;

}

}
?>
up
-30
MrBertie
13 years ago
Another way to filter an array, and simply return the matching items: preg_grep!
up
-28
fgmhhfg at gmail dot com
10 years ago
As for the php 5.5.3 version, the example turn out like:
Array
(
[0] => A:1
[1] => B:a
...
)
up
-39
Anonymous
10 years ago
As for the php 5.5.3 version, the example will turn out like:
Array
(
[0]=>A:1
[1]=>B:a
...
)
To Top