1

したがって、より大きな文字列内の特定の文字列を抽出する次のスクリプトがあります。

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]か?

よろしくお願いします。良い一日をお過ごしください。

4

5 に答える 5

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
)
于 2012-09-16T00:40:55.187 に答える
2

関数が である限りwhile、その関数が文字列を返し、それを配列に追加し、文字列の末尾で関数を再度実行するように関数を変更します。

編集:

たまたま自分で試してみたい場合に、正しい解決策を詳しく説明したくありませんでした。ここにそれを行う1つの方法があり、あなたが望むものになります。元の投稿にできるだけ変更を加えないようにしました。

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"
}
于 2012-09-16T00:41:23.410 に答える
0

上記の例を見ると、文字列には HTML タグである b タグが含まれています。

PHP ライブラリには、文字列から HTML タグを削除する strip_tags という名前の関数が定義されています。

したがって、出力文字列はプレーン テキストの文字列になり、文字列からすべての HTML タグが削除されます。

于 2012-09-16T00:50:55.760 に答える
0

私は正規表現を使わなければならないのが嫌いなので、ブロートウェアではないバージョンを以下に示します。

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" } 
于 2012-09-16T00:54:18.607 に答える
0

これは役立つかもしれません....

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;
 }
于 2015-06-17T14:11:24.453 に答える