【问题标题】:How to extract only integers from string and chosen letters?如何从字符串和所选字母中仅提取整数?
【发布时间】:2012-05-11 10:01:50
【问题描述】:

我已成功从字符串中提取整数。

怎么做,但包括字符串:“k”、“m”和“b”?

此代码采用给定的网站代码并提取数字,我需要数字和“k”、“m”和“b”

$objectId = 15259;
$lines = file('http://testwebsite.com?obj=' . $objectId);
foreach ($lines as $line_num => $line) {
    $lineCrawl = htmlspecialchars($line);
    $stringSum = "$stringSum$lineCrawl";
}

function get_string_between($string, $start, $end){
    $string = " ".$string;
    $ini = strpos($string,$start);
    if ($ini == 0) return "";
    $ini += strlen($start);
    $len = strpos($string,$end,$ini) - $ini;
    return substr($string,$ini,$len);
}

$parsed = get_string_between($stringSum, "Current guide price", "Today");

$guideprice = ereg_replace("[^0-9]", "", $parsed); 

echo $guideprice; 

【问题讨论】:

  • 为了让未来的 SO 读者能够充分理解您的任务,请通过提供一个或多个输入字符串和您的预期输出来为这个问题添加上下文。

标签: php regex ereg-replace


【解决方案1】:

0-9 更改为0-9kmb 应该可以工作

【讨论】:

  • 没有昏迷,只有 [0-9kmb]。否则,昏迷也会被移除。
  • 虽然这个答案可能已经解决了这个问题,但它对未来的 SO 读者几乎没有什么影响。请通过提供一些支持信息、文档参考和/或解释来改进您的答案。我知道这是一个简单的答案,但这个问题可能会链接到未来的重复页面,那些读者可能想了解为什么这个答案是正确的。
【解决方案2】:

更改代码以更好地使用正则表达式:

<? //PHP 5.4+
$matches = [];
\preg_match(
    <<<'REGEX'
`(?x)
    Current \s guide \s price
    \D* (?<price> \d+ [kmb] \s )
    Today
`u
REGEX
,   \file_get_contents('http://testwebsite.com?obj=' . 15259),
    $matches
);
echo $matches['price'];
?>

【讨论】:

  • 有什么区别吗?从未听说过正则表达式
  • 虽然将get_string_between()ereg_replace() 结合使用preg_match() 是一个明智的选择(最佳实践),但我相信您的模式不会成功。如果 OP 更新问题以显示一些示例输入,那么应该发布更好的模式。
猜你喜欢
  • 2019-09-14
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 2021-12-10
  • 1970-01-01
  • 2018-12-13
相关资源
最近更新 更多