假设我有一个巨大的字符串,我想提取属于某个名称的特定值,例如Apple的股票价格。
假设说字符串看起来像这样(实际上是html,但这并不重要)
$ output =“nsdfsdnfsnfdnsdfnueruherdfndsdndnjsdnasdnn Apple dndfjnfjdf647tgtgtgeq”;
我想提取值647。
真正的字符串可能是几十万个字符。
我可以通过以下方式揭示Apple的立场:
$str = "Apple";
$pos = strpos($output, $str);
假设该函数返回87310,它是Apple中第一个字母的索引位置。
这是我的问题?当我知道Apple的初始位置时,是否有一种简单的方法来提取价值?我已经找了这样的功能,但现在却找不到它。 我可以通过循环Apple名称然后提取相关字符来轻松解决这个问题?但它至少可以节省击键次数而不是使用函数。
感谢!!!
答案 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);