5

我有一个字符串,其中包含许多下划线后跟单词 ex:“ Field_4_txtbox”我需要找到字符串中的最后一个下划线并删除它后面的所有内容(包括“_”),所以它会返回给我“ Field_4”但我需要这个适用于不同长度的结尾字符串。所以我不能只修剪固定的长度。

我知道我可以做一个 If 语句来检查某些结尾,例如

if(strstr($key,'chkbox')) {
    $string= rtrim($key, '_chkbox');
}

但我想用正则表达式模式一次性完成,我该怎么做呢?

4

3 回答 3

11

匹配的正则表达式将是:

/_[^_]*$/

只需将其替换为'':

preg_replace( '/_[^_]*$/', '', your_string );
于 2013-05-28T23:14:04.687 回答
6

无需使用极其昂贵的正则表达式,一个简单的strrpos()就可以了:

$string=substr($key,0,strrpos($key,"_"));

strrpos — 查找字符串中最后一次出现的子字符串的位置

于 2013-05-28T23:14:17.210 回答
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;
于 2013-05-28T23:31:52.670 回答