簡體   English   中英

正則表達式匹配一個數字后跟一個特定的字符串

[英]Regex to match a number followed by a specific string

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

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

所以這個數字可能是一個小數。 我需要能夠返回數字(所以 0.25 或 25),其中數字后跟“mcg”

誰能幫我嗎。 這不起作用:

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

另一種選擇是使用可選的小數部分\\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 演示

這是preg_match_all的工作

preg_match_all('/([\d.]+)mcg/', $item, $matches);

[\\d.]+匹配 1 個或多個數字或點。

這是簡單的版本:

<?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>';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM