我在Matlab中有一個字符串,並且想要用另一個模式替換其中某個模式的第三個外觀。我怎樣才能做到這一點?在regexprep中選擇模式
例如:
str = 'ter-yu-ter-u-ter-hg';
patternRemove = 'ter';
patternAdd = 'mov';
答案:
str = 'ter-yu-ter-u-mov-hg';
我在Matlab中有一個字符串,並且想要用另一個模式替換其中某個模式的第三個外觀。我怎樣才能做到這一點?在regexprep中選擇模式
例如:
str = 'ter-yu-ter-u-ter-hg';
patternRemove = 'ter';
patternAdd = 'mov';
答案:
str = 'ter-yu-ter-u-mov-hg';
str = 'ter-yu-ter-u-ter-hg';
patternRemove = 'ter';
patternAdd = 'mov';
ind = regexp(str,patternRemove);
ii = ind(3);
strOut = [str(1:ii-1) patternAdd str(ii+numel(patternRemove):end)];
對不起,我不能給你更多的幫助,但我不知道你會如何去了解它在Matlab。如果我試圖解決這個問題,那我就是這麼做的。
<?php
$i = 0; // SET A DEFAULT VALUE FOR OUR COUNTER
$str = 'ter-yu-ter-u-ter-hg-ter-as-b-ter-a-sdf-w-ter-s-ter-asd'; // TEXT TO WORK ON
$remove = 'ter'; // TEXT TO REPLACE EACH THIRD OCCURRENCE OF
$replace = 'mov'; // TEXT TO REPLACE EACH THIRD OCCURRENCE WITH
// USE A CALLBACK FUNCTION TO CHECK TO SEE HOW MANY TIMES IT'S FOUND A MATCH
// INCREMENT THE COUNTER EACH TIME
// IF THE COUNTER IS 3, RESET IT TO ZERO AND MAKE THE REPLACEMENT
$string = preg_replace_callback('/'.$remove.'/', function($m) use(&$i, $remove, $replace) {$a = $remove; if (++$i == 3) {$i = 0; $a = $replace;} return $a;}, $str);
print $string;
此輸出以下:
ter-yu-ter-u-mov-hg-ter-as-b-ter-a-sdf-w-mov-s-ter-asd
如果你沒有類似於preg_replace_callback
一個功能,你很可能在爆炸你的搜索詞成段,打破它除了在remove
。然後遍歷所有的字符串部分,並每次增加計數器。如果計數器除以三的餘數爲零,則應用您的替換。
下面是一個使用foreach
一個例子:
// SET THE DEFAULTS
$i = 0;
$str = 'ter-yu-ter-u-ter-hg-ter-as-b-ter-a-sdf-w-ter-s-ter-asd';
$remove = 'ter';
$replace = 'mov';
$final_string = ''; // THIS WILL BE OUR OUTPUT STRING LATER
// BREAK APART THE STRING INTO AN ARRAY OF MATCHES, BASED ON THE $remove VALUE
$matches_for_remove = explode($remove, $str);
// LOOP THROUGH EACH ITEM IN THE ARRAY
foreach ($matches_for_remove AS $match) {
// SET THE DEFAULT STRING TO $remove
$replacement_string = $remove;
if (++$i % 3 == 0) { // IF THE REMAINDER IS ZERO, THEN DO THE REPLACEMENT
$replacement_string = $replace;
}
// IF IT'S NOT THE END, APPEND THE remove OR replace PORTION ON TO THE END
if ($i == count($matches_for_remove)){
$final_string .= $match;
}
else {
$final_string .= $match.$replacement_string;
}
}
print $final_string;
而同樣的例子,但使用for
循環,而不是一個foreach
:
$str = 'ter-yu-ter-u-ter-hg-ter-as-b-ter-a-sdf-w-ter-s-ter-asd';
$remove = 'ter';
$replace = 'mov';
$final_string = '';
for ($i = 0; $i < count($matches_for_remove); $i++) {
$replacement_string = $remove;
if (($i + 1) % 3 == 0) {
$replacement_string = $replace;
}
if ($i == count($matches_for_remove) - 1) {
$final_string .= $matches_for_remove[$i];
}
else {
$final_string .= $matches_for_remove[$i].$replacement_string;
}
}
print $final_string;
再次,對不起,如果我的例子,用PHP編寫的沒有任何意義。我理解這個概念,而不是如何將它翻譯成Matlab。但希望這至少會讓你指出正確的方向。