PHP和正则表达式如果找到单词

时间:2011-04-11 19:51:12

标签: php regex preg-replace preg-match

如果在字符串中找到某个单词,我希望只执行一个字符条,所以如果单词数字与正则表达式匹配,它将执行一个条带所有实际数字0-9或preg将它们替换为空,BTW数字将始终包含在“”中。将这两个功能放在一起的最佳方法是什么?一个例子是,如果数据是人,数字很有趣! “123ABC”它将归还Man,数字很有趣! “ABC”如果数字不存在,则忽略它们。

5 个答案:

答案 0 :(得分:2)

我觉得这里的一些答案过于复杂。也许这只是我,但这应该是你所需要的:

if (stripos($str, 'numbers') !== false) {
    $str = preg_replace('/\d/', '', $str);
}

编辑:如果您只想要引号内的数字,您可以使用正则表达式进行操作,但我肯定会这样做:

if (stripos($str, 'numbers') !== false) {
    $arr = explode('"', $str);

    for ($i = 1; $i < count($arr); $i += 2) {
        $arr[$i] = preg_replace('/\d/', '', $arr[$i]);
    }

    $str = implode('"', $arr);
}

答案 1 :(得分:1)

如果我正确理解了这个问题,可能就像:

if (strpos($string, "numbers") !== false) {
    $string = preg_replace('/"\d+"/', '', $string);
}

答案 2 :(得分:0)

您可以使用strpos函数首先检查字符串。

这样的东西

if(strpos($mystr,"Some value")!==false) { /*preg_replace here.*/ }

答案 3 :(得分:0)

@Ryan Cooper:试试 -

$input = 'Man, Numbers are fun! "123ABC"';

echo stripnums("Numbers", $input);

function stripnums($needle, $haystack)
{
    if (stripos($haystack, $needle) !== 0)
    {
        return preg_replace('/[0-9]/', '', $haystack);
    }
}

答案 4 :(得分:0)

这样的事情对你有用:

$str = 'Man, Numbers are fun! "123ABC"';
var_dump(preg_replace_callback("(.*\bNumbers\b.*)",
create_function(
'$matches',
'return preg_replace("/(\"[^\d]*)\d+(.*\")/", "$1$2", $matches[0]);'
),
$str));

OUTPUT:
string(27) "Man, Numbers are fun! "ABC""

\ bNumbers \ b会确保将单词Numbers与单词边界匹配,以便xyzNumbersNumbersxyz 匹配。