Regex выберите все, кроме чисел, содержащих 5 - PullRequest
0 голосов
/ 15 января 2019

Мне нужно исключить все числа, которые содержат 5, из строки с помощью регулярных выражений.

Учитывая строку целых чисел, разделенных запятыми пробелы i.e. "1 2 3 4 5 ... 15 16" мне нужно вернуть эту строку с исключенными числами, которые содержат 5 (5, 15, 54 etc.), используя регулярное выражение. Я пытался добиться этого, используя негативные взгляды, но безуспешно. Он успешно фиксирует числа, которые заканчиваются на 5 (15, 75), но не те, которые начинаются с (56,57). Пожалуйста, помогите мне выяснить, чего мне не хватает.

$s = implode(' ', range($start, $end));
$sm = preg_replace('/(?!\d*5\d*)(\d+)\d*/', '', $s)

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Вы можете использовать это регулярное выражение, чтобы выбрать число, которое содержит 5 (опционально также удалить пробел после этого) и заменить его пустой строкой,

-?\d*5\d* ?

Демо

Поэтому попробуйте изменить свой код на,

$s = "1 2 3 4 -5 8 7 15 7 22 51 15 16 -23532 215 232 522 952 332 -25 56 434";
$sm = preg_replace('/-?\d*5\d* ?/', '', $s);
echo $sm;

Печать

1 2 3 4 8 7 7 22 16 232 332 434
0 голосов
/ 15 января 2019

Используйте этот шаблон

\b(?:[0-4]|[6-9])+\b

Это довольно просто. \b - это граница слова (это сокращение от (?:\w\W|\W\w)), а затем он ищет цифры 0-4 или 6-9.

Дальнейшее объяснение:
\b граница слова
(?: начать группу без захвата
[0-4]|[6-9] соответствует символу от 0-4 до 6-9 включительно. то есть любая цифра, кроме 5
) конец группы захвата
+ квантирует, чтобы дать 1 или более из предыдущего матча, который является группой захвата
\b граница слова

edit: изменено * на +, так как я не могу представить причину, по которой вы хотите сопоставлять без цифр

0 голосов
/ 15 января 2019
<?php

$string = '1 2 3 6 5 55 12 14 75 61 8590';


$data = explode(' ',$string);


foreach($data as $row){
    if (strpos($row, '5') !== false) {
        $newArray[] = $row;
    }
}

echo '<pre>';
print_r($newArray);

Приведенный выше код примет строку, разделенную запятой, и после разнесения поместит каждое из значений, содержащих «5», в новый массив для печати. Выход:

Array
(
    [0] => 5
    [1] => 55
    [2] => 75
    [3] => 8590
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...