Regex для соответствия числа, за которым следует указанная строка c - PullRequest
0 голосов
/ 20 января 2020

Мне нужно найти число, за которым следует указанная строка c, внутри другой строки.

Исходная строка может быть такой: некоторый текст 0,25 микрограмм, еще немного текста, некоторый текст 25 микрограмм, еще немного текста

чтобы число могло быть десятичным. Мне нужно иметь возможность вернуть номер (то есть 0,25 или 25), когда за номером следует 'mcg'

Может кто-нибудь мне помочь. Это не работает:

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

Ответы [ 3 ]

1 голос
/ 21 января 2020

Другой вариант - захватить ди git с необязательной десятичной частью \d+(?:\.\d+)? и использовать границу слова \b, чтобы совпадение не входило в большее слово.

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

Regex demo | Php demo

Пример кода

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

Regex demo | Php демо

0 голосов
/ 20 января 2020

вот простая версия:

<?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>';
0 голосов
/ 20 января 2020

Это задание для preg_match_all

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

[\d.]+ соответствует 1 или более цифрам или точке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...