繁体   English   中英

如果存在匹配项,则PHP正则表达式将替换字符串的开头和结尾

[英]PHP regular expression replace beginning and end of string if match exists

如果存在匹配项,您能否帮助我解决这个问题,我想在PHP中替换字符串的开头和结尾,例如:

源字符串:
tr_abcdef_langtr_abcdeftr_abcdef_cba
我想替换字符串使其像这样:
fk_abcdeffk_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

我解决你的正则表达式问题

$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);

感谢所有尝试提供帮助的人

我找到了解决方案,它看起来像:

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

再次感谢您,最好的问候

韦尔

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM