【问题标题】:PHP: How to get a string from between the first two occurences of characterPHP:如何从前两次出现的字符之间获取字符串
【发布时间】:2012-03-08 19:14:46
【问题描述】:

假设我有以下代码:

$var = '-77-randomtext-moretext.extension'

因此,变量中的任何内容都是固定的,除了连字符 ( - ) 和扩展名。

然后假设我需要将'-77-'部分存储为字符串。 “-77-”表示前两个连字符之间的任何内容,包括连字符本身。

我该怎么做?

【问题讨论】:

标签: php


【解决方案1】:

实现此目的的两种主要方法是explodepreg_filter

拆分:

$varArray = explode( '-', $var );
$string77 = '-' . $varArray[1] . '-'; // equals '-77-'

preg_filter;

$string77 = preg_filter( '/^(-.+-).*$/', '$1', $varArray ); // equals '-77-', or NULL if the string doesn't match

split 方法更快,但不太可靠。 preg_filter 将确保您始终获得所需的数据,或者如果数据不存在则为 NULL,但需要更多处理。

【讨论】:

  • 最终使用了爆炸式。非常感谢,这对我来说确实是一项艰巨的任务。
【解决方案2】:

您可以使用正则表达式:/-(.+?)-/

【讨论】:

    【解决方案3】:
    $var = '-77-randomtext-moretext.extension';
    preg_match('/-(.+?)-/', $var, $matches);
    echo $matches[0]; // -77-
    

    【讨论】:

    • preg_match返回的数组的第一个索引是整个匹配字符串,不是第一个匹配的组。
    • @RyanP:你应该试试上面的代码还是我应该在键盘上为你创建一个演示?
    【解决方案4】:

    使用两个strpos() 调用之间的距离并根据这些位置获取substr()

    $var = '-77-randomtext-moretext.extension';
    $first_pos = strpos($var,'-');
    
    $second_pos = strpos($var,'-',($first_pos+1)); //we offset so we find the second 
    $length = ($second_pos+1) - $first_pos; //get the length of the string between these points
    echo  substr($var,$first_pos,$length); 
    

    您也可以使用正则表达式 (preg_match()) 或使用 explode() 方法:

    $pieces = explode('-',$var);
    $results = '-'.$pieces[0].'-';
    

    但这只有在您知道第一个和第二个分隔符相同时才有效。

    【讨论】:

      【解决方案5】:

      你可以使用:

      $parts = explode('-', $var);
      $txt = '-' . $parts[1] . '-';
      

      【讨论】:

      • 需要的元素是数组中的第二个,而不是第一个。
      • 使用ltrimtrim去掉第一个连字符,就可以正常工作了。
      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      相关资源
      最近更新 更多