修改字符串的长度,使其中的某些字符串计为1

时间:2014-07-09 21:52:11

标签: php

似乎无法弄清楚如何做到这一点。给定一个字符串我想返回该字符串的长度......很简单,但我也想要一个“搜索”数组。其中的字符串只计为一个。

$string = 'this is [Enter]a test example of [Enter]something.';

//this can contain any number of different strings
$replace = array(
    '[Alt]',
    '[Backspace]',
    '[Ctrl]',
    '[Del]',
    '[Down]',
    '[End]',
    '[Enter]'
);

以上的预期输出将是:

$string = 'this is [Enter]a test example of [Enter]something.';

// would be 50
$norm_length = strlen($string);

//where all [x]'s in above array count as 1
$length = 38;

3 个答案:

答案 0 :(得分:2)

使用长度为1的字符简单替换每个关键字:

$string = 'this is [Enter]a test example of [Enter]something.';

//this can contain any number of different strings
$replace = array(
    '[Alt]',
    '[Backspace]',
    '[Ctrl]',
    '[Del]',
    '[Down]',
    '[End]',
    '[Enter]'
);

echo strlen(str_replace($replace, "_", $string));

str_replace将数组作为搜索 - 不需要正则表达式)

答案 1 :(得分:0)

我会使用正则表达式用空格替换任何[*]

$replace = array(
    '/\[Alt\]/',
    '/\[Backspace\]/',
    '/\[Ctrl\]/',
    '/\[Del\]/',
    '/\[Down\]/',
    '/\[End\]/',
    '/\[Enter\]/',
);
$string = preg_replace($replace, ' ', $string);
echo strlen($string);

答案 2 :(得分:-1)

根据你的问题,我认为你要求计算一个字符串的字符,但删除搜索“term”(用方括号括起来的单词)并将其计为1.这样就给出字符数并为每次搜索添加一个字符发现的术语。

$string = 'this is [Enter]a test example of [Enter]something.';
$originalLength = strlen($string);

echo 'The original length is: ' . $originalLength . '<br />';

//this can contain any number of different strings
$replace = array(
    '[Alt]',
    '[Backspace]',
    '[Ctrl]',
    '[Del]',
    '[Down]',
    '[End]',
    '[Enter]'
);

preg_match_all("/\[([^\]]+)\]/", $string, $searchterms);

echo 'Found:';

var_dump($searchterms[0]);

$newLength = $originalLength;

foreach($searchterms[0] as $term) {
    var_dump(strlen($term));
    $newLength = $newLength - strlen($term) + 1;
}

echo 'New length (without brackets) is';

var_dump($newLength);