php - 字符串处理 - substr_replace 错误

标签 php regex substring preg-replace

我有一个特定的条件,我需要将“ct”的每个实例替换为“c-t”,前提是“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”之前是元音而不是辅音。

最佳答案

您可以通过使用字符类的正则表达式来完成此操作。

echo preg_replace('/([^aeiou]c)(t[aeiou])/', '$1-$2', 'october solatrix regnum sanctus sanctus');

PHP 演示:https://eval.in/659567

正则表达式101:https://regex101.com/r/Nqiaav/1

或者使用更严格的字符类:

echo preg_replace('/([b-df-hj-np-tv-xz]c)(t[aeiouy])/', '$1-$2', 'october solatrix regnum sanctus sanctus');

https://regex101.com/r/Nqiaav/2 (如果不是元音,可以添加/删除 y)

此外,这假设您只需要小写,如果您想允许大写,请使用 i 修饰符,或将所有大写添加到字符类。

关于php - 字符串处理 - substr_replace 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40003866/

相关文章:

php - laravel carbon 从集合的日期列中获取日期名称

regex - Perl 中用于替换的匹配数字

html - 您能否提供一些示例说明为什么使用正则表达式难以解析 XML 和 HTML?

php - mySQL子字符串和instr问题

php - mysql中如何获取值不为null的列名

php - 防止用户在 Symfony (bcrypt) 中使用相同的密码

php - 正则表达式 - 否定字符串 + OR

c - 针对固定文本和大量子字符串的最快字符串搜索算法

string - 递归删除子字符串的出现

php - 不确定分配时 PHP 数组在做什么