我需要使用正则表达式从字符串中排除所有包含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)
答案 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* ?
因此请尝试将代码更改为
$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