似乎无法弄清楚如何做到这一点。给定一个字符串我想返回该字符串的长度......很简单,但我也想要一个“搜索”数组。其中的字符串只计为一个。
$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;
答案 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);