$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条件。提前致谢。
答案 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>";
}