我有一个字符串:
$string = 'Hello world Vol. 3.5 ispum 99';
我想在
vol
之后获得 float/int 值,所以我最终得到:$value = '3.5';
到目前为止我尝试过的
我能想到的唯一方法是
explode(' ', $string)
并检查 Vol.
之后的迭代是否为浮点数。有不同/更好的方法吗?
原因
我通过 RSS 拉出大量带有随机帖子标题的帖子。我的目标是确定每个帖子与哪个卷相关。每个帖子上的术语数量都不同,所以我们可以有:
Vol.
、 volume
、 episode
、 book
等。 最佳答案
您可以为此使用正则表达式:
$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/