【问题标题】:Get the string after the second underscore in PHP [closed]获取PHP中第二个下划线后的字符串[关闭]
【发布时间】:2019-03-20 16:14:22
【问题描述】:

1_0_这是字符串

456_1_This_is_other_string_next

1999999_12_Is-string-too

如何获得:This is string, This_is_other_string_next, Is-string-too

谢谢

【问题讨论】:

  • 昨天有一个非常相似的问题。它还显示没有代码尝试。请说明您遇到的编码问题。
  • 如果 OP 不知道如何在 PHP 中操作字符串,我认为在这种情况下不需要代码尝试。
  • @asiby substr 被标记(不是我会采取的方法,但可以做到)。
  • 这是一个字符串还是不同的字符串?
  • 不同的字符串。这些是例子。来了:id + number + 文件名

标签: php string substr


【解决方案1】:

只是一个值得思考的例子:

echo explode('_', '1_0_This is string', 3)[2];
echo explode('_', '1999999_12_Is-string-too', 3)[2];

【讨论】:

  • 第二个_之后我什么都不知道,可能包括很多_,我们无法完成爆炸。
  • 感谢您的帮助。我知道爆炸,这是一个基本功能,它不适用于:456_1_This_is_other_string_next
  • 哦,那是我的错。对不起。您的解决方案很优雅,非常感谢:)
  • 如果此处的某个答案对您有所帮助 - 请随时接受
【解决方案2】:

您可以尝试使用_ 作为分隔符使用explode(string $delimiter, string $string [, int $limit = PHP_INT_MAX]): array 分解原始字符串(请参阅http://php.net/manual/en/function.explode.php)。

你可以计算结果数组中的项目数并相应地返回一些东西。

示例 ...

$string = "1_0_This is string";

$parts = explode('_', $string);

$result = "";

if (count($parts) >= 3) {
  $result = $parts[2];
}

print $result;

【讨论】:

    【解决方案3】:

    使用 preg_replace 限制

    echo preg_replace('/[^_]+_/', '', '1999999_12_Is-string-too', 2);
    

    输出

    Is-string-too
    

    正则表达式很简单。匹配任何不是_ 的东西(不止一次,贪婪),然后是_。限换2人。

    使用 Preg 拆分

    print_r(preg_split('/^([^_]+_){2}/', '456_1_This_is_other_string_next', -1, PREG_SPLIT_NO_EMPTY));
    

    输出

    Array
    (
        [0] => This_is_other_string_next
    )
    

    基本上相同的正则表达式,但这个匹配模式发生的前 2 次。你可以用 preg_replace 做同样的事情,但它在那里毫无意义。

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 2019-08-11
      • 2014-03-23
      • 1970-01-01
      相关资源
      最近更新 更多