0

例として、一致が存在する場合、PHPで文字列の先頭と末尾を置き換えたいこの問題について、私を助けていただけませんか。

ソース文字列:
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
4

2 に答える 2

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);
于 2013-03-27T09:04:57.600 に答える
0

助けようとしたすべての人に感謝します

私は解決策を見つけました、そしてそれは次のように見えます:

$pattern = "/^([a-zA-Z]+?)_(\w+?)(_trans|_translation|_languages)?$/i";             
$replacement    = 'fk_$2';
$fk_field_name = preg_replace($pattern, $replacement, $tbl_name); 

よろしくお願いいたします。

ウェール

于 2013-03-28T09:22:25.707 に答える