从(巨大)字符串的某个索引位置提取子字符串

时间:2013-12-09 15:39:39

标签: php string strpos

假设我有一个巨大的字符串,我想提取属于某个名称的特定值,例如Apple的股票价格。

假设说字符串看起来像这样(实际上是html,但这并不重要)

$ output =“nsdfsdnfsnfdnsdfnueruherdfndsdndnjsdnasdnn Apple dndfjnfjdf647tgtgtgeq”;

我想提取值647。

真正的字符串可能是几十万个字符。

我可以通过以下方式揭示Apple的立场:

$str = "Apple";
$pos = strpos($output, $str);

假设该函数返回87310,它是Apple中第一个字母的索引位置。

这是我的问题?当我知道Apple的初始位置时,是否有一种简单的方法来提取价值?我已经找了这样的功能,但现在却找不到它。 我可以通过循环Apple名称然后提取相关字符来轻松解决这个问题?但它至少可以节省击键次数而不是使用函数。

感谢!!!

2 个答案:

答案 0 :(得分:2)

要提取股票价格,您可能希望这样做:

在字符串中搜索“Apple”并保存$ position + 5(Apple的长度)。在$ position之后直接搜索,一次一个字符,对于第一个字符is_numeric,并将其添加到字符串$ stock_val。继续添加所有后续字符,直到找到!is_numeric。这是我笨重的代码:

$position = strpos(strtolower($str), "apple") + strlen("apple");
$temp_str = substr($str, $position);

$stock_val = "";

do {
$char = substr($temp_str, 0, 1);   //Take first char of $temp_str
$temp_str = substr($temp_str, 1);  //Remove that char from $temp_str

    $is_acceptable = (is_numeric($char) || $char == "." || $char == ",");
if($is_acceptable) {            //If the char is_numeric, add it to $stock_val
    $stock_val .= $char;
}
if(!$is_acceptable && $stock_val != "") {
    break;                     //If the char is NOT numeric AND $stock_val
}                              //already has characters, break.
} while(strlen($temp_str) > 0);        //Repeat while there are still characters

答案 1 :(得分:0)

你知道起始位置所以通过strlen($ str)计算结束位置然后使用substr来删除不需要的字符串 使用substr

这样的事情
$portion = substr(substr($string, 0, -(strlen($string) - $end)), $start);