-2

重複の可能性:
2つの文字列間でコンテンツを取得するPHP

2つの部分文字列の間に出現するすべてのテキストの配列を返すphp関数を作成しようとしています。私は正規表現では役に立たないので、これは非常に便利です。すでに非常に優れた表現があると確信していますが、見つけることができません。

    function getAllBetweenStr($input, $start, $end)
    {
         //DO STUFF

         //RETURN ARRAY
    }


$inputStr ="<a href='http://formaco4/en/abc' class='currentLink' hreflang='en'>abc1/a>
<a href='http://formaco4/en/abc/b1'  hreflang='en'>abc2</a>
<a href='http://formaco4/en/abc/b2'  hreflang='en'>abc3</a>
<a href='http://formaco4/en/abc/b3'  hreflang='en'>abc4</a>";


$linkStr = array();
$linkStr = getAllBetweenStr($inputStr, "http://formaco4/en/'", "'  hreflang")

返される配列は次のようになります。Array([0] => "abc / b1"、[1] => "abc / b2"、...、[n] => "gingers / rule")

それが役立つなら、私はすでにこの機能を持っています:

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

5 に答える 5

1

私はこのようなものがうまくいくと信じています-それはpreg_match_all2つと文字列の間の何かをキャプチャするために使用$start$endます。

function getBetweenStr($string, $start, $end)
{
    preg_match_all( '/' . preg_quote( $start, '/') . '(.*?)' . preg_quote( $end, '/') . '/', $string, $matches);
    return $matches[1];
}
于 2012-10-05T13:32:18.163 に答える
0

私はpreg_match関数を使用していません。うまくいけば、これがお役に立てば幸いです

これを試してみてください、私はあなたのためにより良い機能も提供しました(::

function stribet($inputstr, $delimiterLeft, $delimiterRight) {
    $posLeft = stripos($inputstr, $delimiterLeft) + strlen($delimiterLeft);
    $posRight = stripos($inputstr, $delimiterRight, $posLeft);
    return substr($inputstr, $posLeft, $posRight - $posLeft);
}

$links = array("<a href='http://formaco4/en/abc' class='currentLink' hreflang='en'>abc1/a>", "<a href='http://formaco4/en/abc/b1'  hreflang='en'>abc2</a>");

foreach ($links as $linkstr){
$linkstr = stribet($linkstr, "http://formaco4/en/'", "'  hreflang='");
//echo $linkstr;
$data[] = $linkstr;
}

print_r($data);

通常の文字列関数に固執したい場合は<a 、分解してからforeachループを使用してデータを取得してください。

何かのようなもの

$inputStr ="<a href='http://formaco4/en/abc' class='currentLink' hreflang='en'>abc1/a>
<a href='http://formaco4/en/abc/b1'  hreflang='en'>abc2</a>
<a href='http://formaco4/en/abc/b2'  hreflang='en'>abc3</a>
<a href='http://formaco4/en/abc/b3'  hreflang='en'>abc4</a>";
$inputArray = explode ("<a", $inputStr);
  foreach ($inputArray as $linkstr){
    $linkstr = stribet($linkstr, "http://formaco4/en/'", "'  hreflang='");
    //echo $linkstr;
    $data[] = $linkstr;
    }

    print_r($data);
于 2012-10-05T13:32:18.250 に答える
0

正規表現を学ぶことは本当に価値があります。それらは非常に強力で便利です:

preg_match_all('|'.preg_quote($start).'(.*?)'.preg_quote($end).'|', $input, $linkStr);

あなたの例では、これは次の正規表現を構築します。

|http:\/\/formaco4\/en\/\(.*?)  hreflang|

parens()は、文字列のその部分をキャプチャするように指示します。「。*?」ペア内で、次の文字まですべての文字をキャッチするように指示します。

于 2012-10-05T13:32:21.573 に答える
0

これを試してください(テストされていません):

function find_occurencies($start, $search, $end)
{
    $start = stripslashes($start);
    $end = stripslashes($end);
    $search = stripslashes($search);

    $pattern = '%'. $start . '([\s\w]+)?' . $end . '%';
    preg_match_all($pattern, $search, $matches);

    // Print the matches (should)
    echo '<pre>';
    print_r($matches);
    echo '</pre>';
}

それがうまくいくことを願っています。

于 2012-10-05T13:34:05.800 に答える
0
<?php

function getAllBetweenStr($string, $start, $end)
    {
        $array_to_return = array();
        for($i=0; $i<count(explode($start,$string))-1; $i++) {
        $str_0 = explode($start,$string);
        $str_1 = explode($end, $str_0[1]);
        $array_to_return[$i] = $str_1[0];
        }
        return $array_to_return;
    }

$inputStr ="<a href='http://formaco4/en/abc' class='currentLink' hreflang='en'>abc1</a>
<a href='http://formaco4/en/abc/b1'  hreflang='en'>abc2</a>
<a href='http://formaco4/en/abc/b2'  hreflang='en'>abc3</a>
<a href='http://formaco4/en/abc/b3'  hreflang='en'>abc4</a>";
$linkStr = getAllBetweenStr($inputStr, "hreflang='en'>", "</a>");
print_r ($linkStr);
?>
于 2012-10-05T13:50:40.953 に答える