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');
?>preg_filter
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
preg_filter
Референца за `function.preg-filter.php` со подобрена типографија и навигација.
preg_filter
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
preg_filter — Изврши пребарување и замена со регуларен израз
= NULL
string|array
$pattern,string|array
$replacement,string|array
$subject,int
$limit = -1,int
&$count = null): string|array|null
preg_filter() е идентично со preg_replace() освен што враќа само (можеби трансформирани) предмети каде што имало совпаѓање. За детали за тоа како работи оваа функција, прочитајте го preg_replace() documentation.
Параметри
Параметрите се опишани во документацијата за preg_replace().
Вратени вредности
Враќа array ако subject
параметарот е array, или string otherwise.
Ако не се најдат совпаѓања или се случи грешка, празно array
се враќа кога subject е array
or null otherwise.
Errors/Exceptions
Ако дадениот регуларен израз не може да се состави во валиден регуларен израз, еден E_WARNING се емитува.
Примери
Пример #1 Пример за споредба preg_filter() with preg_replace()
<?php
$subject = array('1', 'a', '2', 'b', '3', 'A', 'B', '4');
$pattern = array('/\d/', '/[a-z]/', '/[1a]/');
$replace = array('A:$0', 'B:$0', 'C:$0');
echo "preg_filter returns\n";
print_r(preg_filter($pattern, $replace, $subject));
echo "preg_replace returns\n";
print_r(preg_replace($pattern, $replace, $subject));
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
preg_filter returns
Array
(
[0] => A:C:1
[1] => B:C:a
[2] => A:2
[3] => B:b
[4] => A:3
[7] => A:4
)
preg_replace returns
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
)
Види Исто така
- — Parle\ParserException класа
- preg_quote() - Квотирајте знаци за регуларни изрази
- preg_replace() - Изврши пребарување и замена на регуларни изрази
- preg_replace_callback() - Изврши пребарување и замена со регуларен израз со користење на повици
- preg_grep() - Врати ги записите од низата што одговараат на моделот
- preg_last_error() - Враќа код за грешка од последното извршување на PCRE регуларен израз
Белешки од корисници 3 белешки
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']
?>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 ;
}
}
?>