我有一个字符串:

$string = 'Hello world Vol. 3.5 ispum 99';

我想在 vol 之后获得 float/int 值,所以我最终得到:
$value = '3.5';

到目前为止我尝试过的

我能想到的唯一方法是 explode(' ', $string) 并检查 Vol. 之后的迭代是否为浮点数。

有不同/更好的方法吗?

原因

我通过 RSS 拉出大量带有随机帖子标题的帖子。我的目标是确定每个帖子与哪个卷相关。每个帖子上的术语数量都不同,所以我们可以有: Vol.volumeepisodebook 等。

最佳答案

您可以为此使用正则表达式:

$string = 'Hello world Vol. 3.5 ispum 99';
if (preg_match('/(Vol\.|volume|episode)\s*(\d+(\.\d+)?)/i', $string, $matches))
    var_dump($matches[2]);
  • (Vol\.|volume|episode) 匹配任何给定的单词
  • \s* 吃任意数量的空格
  • (\d+(\.\d+)?) 匹配整数或浮点值

  • 或更一般地说:
    $terms = ['vol.', 'volume', 'episode'];
    $terms_quoted = [];
    foreach ($terms as $term)
        $terms_quoted[] = preg_quote($term, '/');
    
    $string = 'Hello world Vol. 3.5 ispum 99';
    if (preg_match('/('.implode('|', $terms_quoted).')\s*(\d+(\.\d+)?)/i', $string, $matches))
        var_dump($matches[2]);
    

    关于php - 如果字符串中单词后的术语是浮点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51357144/

    10-10 08:29