繁体   English   中英

在字符串php中提取字符串

[英]extract string within a string php

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

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]

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

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

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
)

修改你的函数,这样只要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"
}

查看上面的示例,字符串包含b标记,这些标记是HTML标记。

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

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

我讨厌必须使用正则表达式,所以这里是一个非英国媒体报道的版本:

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" } 

这可以帮助......

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;
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM