Php 正则表达式匹配后跟特定字符串的数字

Php 正则表达式匹配后跟特定字符串的数字,php,regex,Php,Regex,我需要在另一个字符串中找到一个后跟特定字符串的数字 初始字符串可以是: 一些文本0.25 mcg一些其他文本 一些文本25 mcg一些更多文本 所以数字可以是十进制。我需要能够返回0.25或25的数字,如果数字后面跟“mcg” 有人能帮我吗。这不起作用: if(preg_match('(\d+mcg)', $item, $match)) 这是我的工作 [\d.]+匹配一个或多个数字或点。以下是简单的版本: <?php $item1 = 'some text 0.25mcg some mo

我需要在另一个字符串中找到一个后跟特定字符串的数字

初始字符串可以是: 一些文本0.25 mcg一些其他文本 一些文本25 mcg一些更多文本

所以数字可以是十进制。我需要能够返回0.25或25的数字,如果数字后面跟“mcg”

有人能帮我吗。这不起作用:

if(preg_match('(\d+mcg)', $item, $match))
这是我的工作


[\d.]+匹配一个或多个数字或点。

以下是简单的版本:

<?php
$item1 = 'some text 0.25mcg some more text';
$item2 = 'some text 25mcg some more text';

if (preg_match('/([0-9\\.]+)\\s*mcg/', $item1, $match)) echo $match[1] . '<br>';
if (preg_match('/([0-9\\.]+)\\s*mcg/', $item2, $match)) echo $match[1] . '<br>';

另一个选项是捕获带有可选小数部分的数字\d+?:\。\d+?并使用单词边界\b防止匹配成为较大单词的一部分

\b(\d+(?:\.\d+)?)mcg\b
|

代码示例

$re = '/\b(\d+(?:\.\d+)?)mcg\b/';
$str = 'some text 0.25mcg some more text some text 25mcg some more text';

preg_match_all($re, $str, $matches);
print_r($matches[1]);
输出

Array
(
    [0] => 0.25
    [1] => 25
)
如果您只想要一个匹配而不是一个捕获组,那么您也可以选择积极的前瞻

|

d修饰符将只匹配整数1,2,3。这就是为什么你没有匹配0.25。它这样做是因为它与实际字符匹配。在您的情况下,您告诉它匹配一个或多个数字字符。在某个时刻,正则表达式正在寻找一个点。字符,因此它不匹配。
Array
(
    [0] => 0.25
    [1] => 25
)
\b\d+(?:\.\d+)?(?=mcg\b)