伙计们,我是PHP新手,请帮助!谢谢。 可以说我需要对一些而不是典型的单词进行音节处理: text =“ abce dfia jicd fbii”。 条件是:如果我们在文本中有两个彼此接近的辅音,例如“ bc”,“ df”,“ cd”或“ fb”,则需要用插入符“-”将它们分开。 因此输出必须为:“ ab-ce d-fia jic-d f-bii”。 我的输出是:“ abcei-idfiai-ijicdi-ifbii”。我做错了什么?请帮忙!
$text= "abce dfia jicd fbii";
$letters_1= array("a","e","i","j");
$letters_2= array("b","c","d","f");
$insert= "-";
for ($x=0; $x<strlen($text); $x++) {
foreach($letters_2 as $letter => $value) {
if ($letter==$text[$x] and $value==$value) {
$new_text= str_replace(" ", $text[$x].$insert.$text[$x], $text);
}
}
}
echo $new_text;
我希望输出:“ ab-ce d-fia jic-d f-bii”
答案 0 :(得分:1)
一种实现此目的的方法是使用preg_replace
用两个字母之间用-
替换两个辅音的序列。
$text= "abce dfia jicd fbii";
$consonants = array_diff(range('a', 'z'), array('a', 'e', 'i', 'o', 'u'));
$cset = '[' . implode('', $consonants) . ']';
echo preg_replace("/($cset)($cset)/", '$1-$2', $text);
输出:
ab-ce d-fia jic-d f-bii
请注意,此代码仅适用于最多2个辅音的序列,您可能需要连续两次调用preg_replace
连续3个或更多。例如:
$text = 'abcce ibddfa';
$text = preg_replace("/($cset)($cset)/", '$1-$2', $text);
echo preg_replace("/($cset)($cset)/", '$1-$2', $text);
输出:
ab-c-ce ib-d-d-fa
答案 1 :(得分:0)
为此,我将使用正则表达式。据我所知,“仅辅音”没有简写形式,因此我们需要自己构建该表达式。查看完整的a-z
范围(不包括元音),并尽可能使用范围,这使我们b-d
,f-h
,j-n
,p-t
和{{1} }作为辅音范围(如果要将v-z
视为元音,请使用y
和v-x
而不是z
)。
所以这样的事情应该起作用(可以使用更短或更有效的表达方式来做到这一点):
v-z