繁体   English   中英

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

[英]Extract substring from a certain indexposition of (huge) string

假设我有一个很大的字符串,我想在其中提取某个名称的某些值,例如Apple的股价。

可以说字符串看起来像这样(实际上是html,但这在这里无关紧要)

$ output =“ nsdfsdnfsnfdnsdfnueruherdfndsdndnjsdnasdnn 苹果 dndfjnfjdf647tgtgtgegeq”;

我想提取值647。

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

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

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

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

我的问题来了吗? 当我知道Apple的起点时,是否有一种简单的方法来提取价值? 我一直在寻找这样的功能,但现在找不到。 我可以通过在Apple的名字前面循环然后提取相关字符来轻松解决此问题? 但这至少可以节省击键,而只需使用一个函数即可。

谢谢!!!

要仅提取股票价格,您需要执行以下操作:

在字符串中搜索“ 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

您知道起始位置,因此可以通过执行strlen($ str)计算结束位置,然后使用substr使用substr切掉不需要的字符串

$portion = substr(substr($string, 0, -(strlen($string) - $end)), $start);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM