Я пытаюсь получить целое число слева и справа для ввода переменной $str
используя REGEX. Но я продолжаю получать запятые вместе с целым числом. Мне нужны целые числа, а не запятые. Я также попытался заменить подстановочный знак .
с \d
но до сих пор нет разрешения.
$str = "1,2,3,4,5,6";
function pagination()
{
global $str;
// Using number 4 as an input from the string
preg_match('/(.{2})(4)(.{2})/', $str, $matches);
echo $matches[0]."\n".$matches[1]."\n".$matches[1]."\n".$matches[1]."\n";
}
pagination();
Я считаю, что вы ищете группу Regex Non Capture
Вот что я сделал:
$regStr = "1,2,3,4,5,6";
$regex = "/(\d)(?:,)(4)(?:,)(\d)/";
preg_match($regex, $regStr, $results);
print_r($results);
Дает мне результаты:
Array ( [0] => 3,4,5 [1] => 3 [2] => 4 [3] => 5 )
Надеюсь это поможет!
,
с при всех.
Как насчет использования анализатора CSV?
$str = "1,2,3,4,5,6";
$line = str_getcsv($str);
$target = 4;
foreach($line as $key => $value) {
if($value == $target) {
echo $line[($key-1)] . '<--low high-->' . $line[($key+1)];
}
}
Вывод:
3<--low high-->5
или регулярное выражение может быть
$str = "1,2,3,4,5,6";
preg_match('/(\d+),4,(\d+)/', $str, $matches);
echo $matches[1]."<--low high->".$matches[2];
Вывод:
3<--low high->5
Единственным недостатком этих подходов является то, что это число - это начало или конец диапазона. Это будет так?
Учитывая ваше имя функции, я собираюсь предположить, что вам это нужно для разбивки на страницы.
Следующее решение может быть проще:
$str = "1,2,3,4,5,6,7,8,9,10";
$str_parts = explode(',', $str);
// reset and end return the first and last element of an array respectively
$start = reset($str_parts);
$end = end($str_parts);
Это не позволяет вашему регулярному выражению иметь дело с вашими цифрами, входящими в двойные цифры.
preg_match('/(\d+),4,(\d+)/', $str, $matches);
тогда$matches[1]
будет иметь3
а$matches[2]
будет содержать5
.