字符串处理 - substr_replace 错误
String Handling - Error with substr_replace
我有一个特定的条件,我需要用 "c-t" 替换 "ct" 的每个实例,前提是 'c' 之前有一个辅音,'t' 之后有一个元音.我做不到:
<?php
$string = "october solatrix regnum sanctus sanctus";
echo constantCT($string);
function constantCT($string)
{
$arr1 = str_split($string);
$length = count($arr1);
$pc=0;
for($j=0;$j<$length;$j++)
{
$check = $arr1[$j+1].$arr1[$j+2];
if($check=='ct')
{
$pc++;
}
}
function strAppend4($string)
{
$arr1 = str_split($string);
$length = count($arr1);
for($z=0;$z<$length;$z++)
{
$check = $arr1[$z+1].$arr1[$z+2];
if($check == 'ct')
{
//echo "ct found <br>";
//echo $arr1[$z]; echo "<br>";
//echo $arr1[$z+3]; echo "<br>";
$verifyC = isConstant($arr1[$z]);
$verifyV = isVowel($arr1[$z+3]);
if($verifyV && $verifyC)
{
echo $z+2;
$updatedString = substr_replace($string, "-", $z+2,0);
//echo $updatedString;
return $updatedString;
}
}
else
{
//echo "ct not found <br>";
}
}
}
$st1 = $string;
for($k=0;$k<$pc;$k++)
{
$st1 = strAppend4($st1);
}
return $st1;
}
所以我应该得到如下输出:
october solatrix regnum sanc-tus sanc-tus
october
中的ct
不能像以前那样乱改'c'有元音没有辅音
试试这个:
for($j=0;$j<strlen($string);$j++)
{
if($string[$j] == 'c' && $string[$j+1] == 't')
{
substr_replace($string, '-', $j+1, 0);
$j += 2;
}
}
echo $string;
您可以通过使用字符 classes.
的正则表达式来做到这一点
echo preg_replace('/([^aeiou]c)(t[aeiou])/', '-', 'october solatrix regnum sanctus sanctus');
PHP 演示:https://eval.in/659567
Regex101: https://regex101.com/r/Nqiaav/1
或更严格的字符 class:
echo preg_replace('/([b-df-hj-np-tv-xz]c)(t[aeiouy])/', '-', 'october solatrix regnum sanctus sanctus');
https://regex101.com/r/Nqiaav/2(可以 add/remove y
如果那不是元音)
此外,这假设您只需要小写字母,如果您还想允许大写字母,请使用 i
修饰符,或者将所有大写字母添加到字符 classes.
我有一个特定的条件,我需要用 "c-t" 替换 "ct" 的每个实例,前提是 'c' 之前有一个辅音,'t' 之后有一个元音.我做不到:
<?php
$string = "october solatrix regnum sanctus sanctus";
echo constantCT($string);
function constantCT($string)
{
$arr1 = str_split($string);
$length = count($arr1);
$pc=0;
for($j=0;$j<$length;$j++)
{
$check = $arr1[$j+1].$arr1[$j+2];
if($check=='ct')
{
$pc++;
}
}
function strAppend4($string)
{
$arr1 = str_split($string);
$length = count($arr1);
for($z=0;$z<$length;$z++)
{
$check = $arr1[$z+1].$arr1[$z+2];
if($check == 'ct')
{
//echo "ct found <br>";
//echo $arr1[$z]; echo "<br>";
//echo $arr1[$z+3]; echo "<br>";
$verifyC = isConstant($arr1[$z]);
$verifyV = isVowel($arr1[$z+3]);
if($verifyV && $verifyC)
{
echo $z+2;
$updatedString = substr_replace($string, "-", $z+2,0);
//echo $updatedString;
return $updatedString;
}
}
else
{
//echo "ct not found <br>";
}
}
}
$st1 = $string;
for($k=0;$k<$pc;$k++)
{
$st1 = strAppend4($st1);
}
return $st1;
}
所以我应该得到如下输出:
october solatrix regnum sanc-tus sanc-tus
october
中的ct
不能像以前那样乱改'c'有元音没有辅音
试试这个:
for($j=0;$j<strlen($string);$j++)
{
if($string[$j] == 'c' && $string[$j+1] == 't')
{
substr_replace($string, '-', $j+1, 0);
$j += 2;
}
}
echo $string;
您可以通过使用字符 classes.
的正则表达式来做到这一点echo preg_replace('/([^aeiou]c)(t[aeiou])/', '-', 'october solatrix regnum sanctus sanctus');
PHP 演示:https://eval.in/659567
Regex101: https://regex101.com/r/Nqiaav/1
或更严格的字符 class:
echo preg_replace('/([b-df-hj-np-tv-xz]c)(t[aeiouy])/', '-', 'october solatrix regnum sanctus sanctus');
https://regex101.com/r/Nqiaav/2(可以 add/remove y
如果那不是元音)
此外,这假设您只需要小写字母,如果您还想允许大写字母,请使用 i
修饰符,或者将所有大写字母添加到字符 classes.