首页 > 解决方案 > 正则表达式匹配一个数字后跟一个特定的字符串

问题描述

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

初始字符串可能是: some text 0.25mcg some more text some text 25mcg some more text

所以这个数字可能是小数。我需要能够返回数字(所以 0.25 或 25),只要数字后面跟着“mcg”

谁能帮我吗。这不起作用:

if(preg_match('(\d+mcg)', $item, $match))

标签: phpregex

解决方案


另一种选择是捕获带有可选小数部分的数字\d+(?:\.\d+)?并使用字边界\b来防止匹配成为更大字的一部分。

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

正则表达式演示| php演示

代码示例

$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
)

如果您只想要匹配而不是捕获组,您也可以选择积极的前瞻(?=

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

正则表达式演示| php演示


推荐阅读