正则表达式选择除包含5的数字以外的任何内容

时间:2019-01-15 13:17:01

标签: php regex

我需要使用正则表达式从字符串中排除所有包含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 :(得分:2)

使用此模式

\b

这很简单。 (?:\w\W|\W\w)是单词边界(\b的缩写),然后搜索数字0-4或6-9。

进一步说明:
(?:字边界
[0-4]|[6-9]启动非捕获组
)匹配0-4或6-9(包括0和4)之间的字符。即除5
之外的任何数字 +结束捕获组
\b量化给出上一个匹配项中的一个或多个,即捕获组
sh字边界

编辑:将*更改为+,因为我无法想象为什么您不希望匹配数字

答案 1 :(得分:1)

<?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
)

答案 2 :(得分:1)

您可以使用此正则表达式选择一个数字,其中包含5(也可以在其后删除空格)并将其替换为空字符串,

-?\d*5\d* ?

boost::mpl::c_str

因此请尝试将代码更改为

$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