PHP程序与stringpos()函数问题有关

时间:2013-07-16 17:39:10

标签: php string strpos

$text = $_POST['text'];  
$find = $_POST['find'];
$offset = 0;
while ($offset < strlen($text))
{
   $pos = strpos($text, $find, $offset);
   $offset += strlen($find);
   echo "$find found in $pos <br>";
}

这个程序有问题。我想要做的就是打印$ find中所有位于$ text的位置。

告诉我问题是什么。尽量不要改变while条件。提前致谢。

3 个答案:

答案 0 :(得分:1)

首先,如果找不到,你需要突破你的循环。 其次,我认为你想要做的是在找到最后一个$ find之后跳到$ text中的点:

$text = $_POST['text'];  
$find = $_POST['find'];
$offset = 0;
while ($offset < strlen($text))
{
   $pos = strpos($text, $find, $offset);
   // $offset += strlen($find); // removed
   if ( $pos===false ) break;
   $offset = $pos+1;
   echo "$find found in $pos <br>";
}

答案 1 :(得分:0)

另一种更紧凑的方法是:

while ( ($pos=strpos($text,$find,$offset)) !== false) {
    echo "$find found in $pos <br>";
    $offset = $pos+1;
}

答案 2 :(得分:0)

为什么不使用这样的正则表达式:

$text = 'hello world, I want to find you world';
$find = 'world';

preg_match_all('/'.preg_quote($find, '/').'/', $text, $matches, PREG_OFFSET_CAPTURE);
echo '<pre>';
print_r($matches);
echo '</pre>';

返回:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => world
                    [1] => 6
                )

            [1] => Array
                (
                    [0] => world
                    [1] => 32
                )

        )

)

要获得相同的输出,请使用:

$text = $_POST['text'];  
$find = $_POST['find'];
preg_match_all('/'.preg_quote($find, '/').'/', $text, $matches, PREG_OFFSET_CAPTURE);
foreach ($matches[0] as $match) {
    echo "$find found in {$match[1]}<br>";
}