preg_replace删除独立数字

时间:2011-11-11 09:10:43

标签: php regex preg-replace

我正在寻找从数字没有相邻字符(包括破折号)的字符串中替换所有独立数字,例如:

  

测试3弦49测试49test9 9

应返回Test string 49Test 49Test9

到目前为止,我一直在玩:

   $str = 'Test 3 string 49Test 49test9 9';
   $str= preg_replace('/[^a-z\-]+(\d+)[^a-z\-]+?/isU', ' ', $str);
   echo $str;

但是没有运气,这会返回

  

测试字符串9Test 9test9

遗漏了部分字符串,我想将[0-9]添加到比赛中,但无济于事,我错过了什么,看起来如此简单?

提前致谢

4 个答案:

答案 0 :(得分:7)

尝试使用单词边界和负面环视作为连字符,例如

$str = preg_replace('/\b(?<!-)\d+(?!-)\b/', '', $str);

答案 1 :(得分:1)

如果你看空格,那就不那么复杂了:)

<?php
$str = 'Test 3 string 49Test 49test9 9';
$str = preg_replace('/(\s(\d+)\s|\s(\d+)$|^(\d+)\s)/iU', '', $str);
echo $str;

答案 2 :(得分:1)

试试这个,我试图满足你在5-abc

上不匹配的额外要求
\s*(?<!\B|-)\d+(?!\B|-)\s*

替换为单个空格

here online on Regexr

然后问题是用字符-扩展单词边界。我通过使用负面外观并寻找-\B(不是单词边界)来实现这一目标

此外,我将周围的空白与\s*进行匹配,因此您必须使用单个空格进行替换。

答案 3 :(得分:0)

我建议使用 explode(" ",$str) 获取字符串中“单词”的数组。那么过滤单个数字会更容易。