我有一个字符串,其中包含许多下划线,后跟单词ex:“Field_4_txtbox
”我需要找到字符串中的最后一个下划线并删除它后面的所有内容(包括“_”),所以它会返回对我来说“Field_4
”但我需要这个来为不同长度的结束字符串工作。所以我不能修剪固定的长度。
我知道我可以做一个If语句来检查某些结局,比如
if(strstr($key,'chkbox')) {
$string= rtrim($key, '_chkbox');
}
但我想用正则表达式一次性完成这项工作,我该如何实现?
答案 0 :(得分:10)
匹配的正则表达式将是:
/_[^_]*$/
只需将其替换为'':
preg_replace( '/_[^_]*$/', '', your_string );
答案 1 :(得分:5)
没有必要使用极其昂贵的正则表达式,一个简单的 strrpos()
就可以完成这项任务:
$string=substr($key,0,strrpos($key,"_"));
strrpos - 查找字符串中子字符串 last 出现的位置
答案 2 :(得分:2)
您也可以使用explode()
:
$string = 'Field_4_txtbox';
$temp = explode('_', strrev($string), 2);
$string = strrev($temp[1]);
echo $string;
从PHP 5.4开始
$string = 'Field_4_txtbox';
$string = strrev(explode('_', strrev($string), 2)[1]);
echo $string;