У меня есть следующий код:
preg_match(
'/(,\s?min\s?(?P<min>[\d]+)\s?)?(,\s?max\s?(?P<max>[\d]+)\s?)?/',
',max 1, min 2',
$vars
);
Итак, результат сопоставления:
//var_dump($vars):
array (size=7)
0 => string ',max 1' (length=6)
1 => string '' (length=0)
'min' => string '' (length=0)
2 => string '' (length=0)
3 => string ',max 1' (length=6)
'max' => string '1' (length=1)
4 => string '1' (length=1)
Как можно оценить значение min
оно пустое ''
.
Мне нужна помощь, чтобы получить значение данных min
и max
независимо от порядка, который они отображают в строке.
Благодарю.
Чтобы захватить min
и max
независимо от их порядка, вы можете использовать это регулярное выражение с чередованием:
\b(?:min\h+\K(?<min>\d+)|max\h+\K(?<max>\d+))\b
Используйте захваченные имена групп min
и max
для извлечения значения из результирующего массива после вызова функции preg_match_all
.
preg_match_all
результат будет многомерным, а значения min
и max
в массиве будут варьироваться в зависимости от их положения в строке. Я объясняю?
Вы можете использовать следующее регулярное выражение:
(?J)(?:,\s?min\s?(?P<min>\d+)\s?)(?:,\s?max\s?(?P<max>\d+)\s?)?|(?:,\s?max\s?(?P<max>\d+)\s?)(?:,\s?min\s?(?P<min>\d+)\s?)?
Регулярное выражение в основном ваше, я просто добавил модификатор (?J)
, который позволяет повторно использовать имена захвата в одном и том же регулярном выражении и добавил альтернативу с другим порядком min
и max
. Кроме того, я удалил квадратные скобки из \d
.
$re = '/(?J)(?:,\s?min\s?(?P<min>\d+)\s?)(?:,\s?max\s?(?P<max>\d+)\s?)?|(?:,\s?max\s?(?P<max>\d+)\s?)(?:,\s?min\s?(?P<min>\d+)\s?)?/';
if (preg_match($re, ",max 1, min 2", $matches)){
print_r($matches["max"] . " = max and min = " . $matches["min"] . PHP_EOL);
}
if (preg_match($re, ",min 5, max 6", $matches)){
print_r($matches["max"] . " = max and min = " . $matches["min"] . PHP_EOL);
}
if (preg_match($re, ", min 7", $matches)){
print_r($matches["max"] . " = max and min = " . $matches["min"] . PHP_EOL);
}
if (preg_match($re, ",max 8", $matches)){
print_r($matches["max"] . " = max and min = " . $matches["min"]);
}
Результаты:
1 = max and min = 2
6 = max and min = 5
= max and min = 7
8 = max and min =