Php 如何在下划线再次出现之前删除所有内容
我无法使用搜索找到解决方案 我正在寻找一个php解决方案,删除第二次出现和下划线(包括下划线)之前的所有字符 例如: 这是一项测试 应输出为: a_检验 我目前有此代码,但它将在第一次出现后删除所有内容:Php 如何在下划线再次出现之前删除所有内容,php,Php,我无法使用搜索找到解决方案 我正在寻找一个php解决方案,删除第二次出现和下划线(包括下划线)之前的所有字符 例如: 这是一项测试 应输出为: a_检验 我目前有此代码,但它将在第一次出现后删除所有内容: preg\u replace('/^[^\u]*.s*/'、'$1'、'这是一个测试'); 注意U修饰符,它告诉正则表达式为*取尽可能少的字符 注意U修饰符,它告诉正则表达式为*取尽可能少的字符。您也可以使用分解,内爆以及数组拼接 $str = "this_is_a_test"; echo
preg\u replace('/^[^\u]*.s*/'、'$1'、'这是一个测试');
注意U
修饰符,它告诉正则表达式为*
取尽可能少的字符
注意
U
修饰符,它告诉正则表达式为*
取尽可能少的字符。您也可以使用分解
,内爆
以及数组拼接
$str = "this_is_a_test";
echo implode('_',array_splice(explode('_',$str),2));//a_test
您还可以使用
分解
,内爆
以及阵列拼接
,如
$str = "this_is_a_test";
echo implode('_',array_splice(explode('_',$str),2));//a_test
为什么要走复杂的路?这是一个使用
strrpos
和substr
的建议:
<?php
$str = "this_is_a_test";
$str_pos = strrpos($str, "_");
echo substr($str, $str_pos-1);
?>
为什么要走复杂的路?这是一个使用
strrpos
和substr
的建议:
<?php
$str = "this_is_a_test";
$str_pos = strrpos($str, "_");
echo substr($str, $str_pos-1);
?>
试试这个
<?php
$string = 'this_is_a_test';
$explode = explode('_', $string, 3);
echo $explode[2];
?>
试试这个
<?php
$string = 'this_is_a_test';
$explode = explode('_', $string, 3);
echo $explode[2];
?>
使用稍微不同的方法
$s='this_is_a_test';
echo implode('_', array_slice( explode( '_', $s ),2 ) );
/* outputs */
a_test
使用稍微不同的方法
$s='this_is_a_test';
echo implode('_', array_slice( explode( '_', $s ),2 ) );
/* outputs */
a_test
在这种情况下,我仍然支持正则表达式:
preg_replace('/^.*?_.*?_/', '', 'this_is_a_test');
或者(此处看起来更复杂,但很容易调整为N..M下划线):
在*?
中使用问号使匹配不贪婪;该模式已从原来的帖子扩展为“通过第二个下划线匹配”
由于目标是删除文本,匹配的部分只需替换为空字符串,因此不需要捕获组或使用替换值等
如果输入不包含两个下划线,则不删除任何内容;如果规则得到进一步澄清,可以很容易地用第二个正则表达式对其进行调整。在这种情况下,我仍然支持正则表达式:
preg_replace('/^.*?_.*?_/', '', 'this_is_a_test');
或者(此处看起来更复杂,但很容易调整为N..M下划线):
在*?
中使用问号使匹配不贪婪;该模式已从原来的帖子扩展为“通过第二个下划线匹配”
由于目标是删除文本,匹配的部分只需替换为空字符串,因此不需要捕获组或使用替换值等
如果输入不包含两个下划线,则不删除任何内容;如果规则得到进一步澄清,则可以使用第二个正则表达式非常轻松地对其进行调整。这是可行的,您是第一个做出响应的人。非常感谢。这是可行的,你是第一个做出回应的人。非常感谢。这看起来是所有解决方案中最优雅的。非常感谢。这看起来是所有解决方案中最优雅的。非常感谢。谢谢,这似乎是最容易理解的。谢谢,这似乎是最容易理解的