【问题标题】:extract string within a string php在字符串php中提取字符串
【发布时间】:2012-09-16 00:36:54
【问题描述】:

所以我有这个脚本可以在更大的字符串中提取给定的字符串:

function get_string($string, $start, $end){
 $string = " ".$string;
 $pos = strpos($string,$start);
 if ($pos == 0) return "";
 $pos += strlen($start);
 $len = strpos($string,$end,$pos) - $pos;
 return substr($string,$pos,$len);
}

所以这是字符串:

$string= '<b>Sample Sample</b> <b>Sample2 Sample2</b>';

$output = get_string($string, '<b>','</b>');

echo $output;

我真的需要一些帮助,因为我没有想法。现在当我回显$output 我得到了

Sample Sample

我想做一个显示两者的更改:

Sample Sample 

Sample2 Sample2

你们有没有任何想法如何修改函数并使其输出排序 一组结果$output[0], $output[1]?

提前谢谢你, 祝你有个美好的一天。

【问题讨论】:

标签: php string substring extract


【解决方案1】:

修改你的函数,只要while,那个函数就会给你一个字符串,把它添加到一个数组中,然后用字符串的结尾再次运行这个函数。

编辑:

如果您碰巧想自己尝试,不想拼出正确的解决方案。这是一种方法,可以得到你想要的。我试图对您的原始帖子进行尽可能少的更改:

function get_string($string, $start, $end){
    $found = array();
    $pos = 0;
    while( true )
    {
        $pos = strpos($string, $start, $pos);
        if ($pos === false) { // Zero is not exactly equal to false...
            return $found;
        }
        $pos += strlen($start);
        $len = strpos($string, $end, $pos) - $pos;
        $found[] = substr($string, $pos, $len);
    }
}

$string = '<b>Sample Sample</b> <b>Sample2 Sample2</b>';

$output = get_string($string, '<b>','</b>');

var_dump( $output );

输出:

array(2) {
  [0]=>
  string(13) "Sample Sample"
  [1]=>
  string(15) "Sample2 Sample2"
}

【讨论】:

  • 嗯,我有这个概念。但这就是我不能做的:(
  • 以上编辑。这可能会有所帮助:)
  • 你在这个功能上帮了我很多忙。我可以给你买杯咖啡吗?
  • 谢谢,如果您愿意,可以随时通过 PayPal 给我送杯咖啡,info@wordpressguru.se
  • 谢谢你,我收到了捐款,如果是你的,我就想不通了 :) 很高兴我能帮助你!
【解决方案2】:

您可能会发现这更简单,也更容易理解:

function get_string($string, $start, $end) {
    $start = preg_quote($start, '|');
    $end = preg_quote($end, '|');
    $matches = preg_match_all('|'.$start.'([^<]*)'.$end.'|i', $string, $output);
    return $matches > 0
        ? $output[1]
        : array();
}        

$string= '<b>Sample Sample</b> <b>Sample2 Sample2</b>';
$output = get_string($string, '<b>', '</b>');    
print_r($output);

哪个输出:

Array
(
    [0] => Sample Sample
    [1] => Sample2 Sample2
)

【讨论】:

  • 另外:当然&lt;b&gt;&lt;/b&gt; 可以更改为您的变量$start$end
  • 不是应该只显示两个值吗,我们能避免这种重复吗? :) 谢谢。
  • 抱歉,我不确定您要避免什么重复。我的回答给了你你要求的结果。
  • 对不起我的一个错误。感谢您的努力。
【解决方案3】:

看看你上面的例子,字符串包含 b 标签,它们是 HTML 标签。

PHP 库定义了一个名为 strip_tags 的函数,该函数将从字符串中去除 HTML 标记。

因此,您的输出字符串将生成纯文本字符串,并从字符串中删除所有 HTML 标记。

【讨论】:

  • 这不是重点。我希望能够获取网页内容的某些部分 仅用于说明目的。
【解决方案4】:

我讨厌必须使用正则表达式,所以这里有一个非膨胀软件版本:

function get_string($string, $start, $end){
 $results = array();
 $pos = 0;
 do {
   $pos = strpos($string,$start,$pos);
   if($pos === FALSE) break;
   $pos += strlen($start);
   $len = strpos($string,$end,$pos) - $pos;
   $results[] = substr($string,$pos,$len);
   $pos = $pos + $len;
 } while(1);
 return $results;
}

$string= '<b>Sample Sample</b> <b>Sample2 Sample2</b>';

$output = get_string($string, '<b>','</b>');

var_dump($output);

输出:

array(2) { [0]=> string(13) "Sample Sample" [1]=> string(15) "Sample2 Sample2" } 

【讨论】:

    【解决方案5】:

    这可能会有所帮助....

    function get_string($string, $start, $end = null) {
         $str = "";
         if ($end == null) {
             $end = strlen($string);
         }
         if ($end < $start) {
             return $string;
         }
         while ($start < $end) {
              $str .=$string[$start];
              $start++;
         }
         return $str;
     }
    

    【讨论】:

      猜你喜欢
      • 2014-06-24
      • 2017-04-01
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 2021-12-03
      • 2011-07-21
      • 2019-10-15
      • 1970-01-01
      相关资源
      最近更新 更多