源字符串:
tr_abcdef_lang
或tr_abcdef
或tr_abcdef_cba
我想替换字符串,如下所示:
fk_abcdef
或fk_abcdef_cba
我的意思是,如果字符串以_lang
或_language
结尾以删除它,并且在开始时使用_
替换第一个fk
之前的所有内容。
更多例子:
tr_abcdef => fk_abcdef
tr_abcdef_language => fk_abcdef
x_abc_cba => fk_abc_cba
x_abc_cba_lang => fk_abc_cba
t_tablename_languages => fk_tablename
答案 0 :(得分:0)
我解决你的正则表达式问题
$pattern = "/^([a-zA-Z]+?)_(\w+?)([_trans|_translation|_languages]*?)$/i";
$replacement = 'fk_$2';
$fk_field_name = preg_replace($pattern,$replacement, "x_abc_cba_gsd_lang");
echo $fk_field_name;
我的代码
试试这个~(.*?)_(.*)_(.*)~si
preg_match_all( '~(.*?)_(.*)_(.*)~si', "x_abc_cba",$M);
$E='';
if($M[3][0]!="lang" and $M[3][0]!="language" and $M[3][0]!="languages"){
$E="_".$M[3][0];
}
echo ("fk_".$M[2][0].$E);
或者在没有php正则表达式的情况下尝试它
$String="x_abc_cba_lang";
$xp=explode("_",$String);
$xp[0]="fk";
end($xp);
$Ek=key($xp);
if($xp[$Ek]=="lang" or $xp[$Ek]=="language" or $xp[$Ek]=="languages"){
unset($xp[$Ek]);
}
echo implode("_",$xp);
答案 1 :(得分:0)
感谢所有试图提供帮助的人
我找到了解决方案,它看起来像:
$pattern = "/^([a-zA-Z]+?)_(\w+?)(_trans|_translation|_languages)?$/i";
$replacement = 'fk_$2';
$fk_field_name = preg_replace($pattern, $replacement, $tbl_name);
再次感谢和最好的问候
瓦埃勒