PHP Regex только для целых чисел

1

Я пытаюсь получить целое число слева и справа для ввода переменной $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();
  • 1
    Пожалуйста, запишите ожидаемый результат.
  • 0
    Попробуйте preg_match('/(\d+),4,(\d+)/', $str, $matches); тогда $matches[1] будет иметь 3 а $matches[2] будет содержать 5 .
Показать ещё 3 комментария
Теги:
preg-match

3 ответа

0
Лучший ответ

Я считаю, что вы ищете группу 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 )

Надеюсь это поможет!

  • 0
    Вам не нужны группы , не захвата, просто не захватить , с при всех.
0

Как насчет использования анализатора 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

Единственным недостатком этих подходов является то, что это число - это начало или конец диапазона. Это будет так?

0

Учитывая ваше имя функции, я собираюсь предположить, что вам это нужно для разбивки на страницы.

Следующее решение может быть проще:

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

Это не позволяет вашему регулярному выражению иметь дело с вашими цифрами, входящими в двойные цифры.

  • 0
    OP может нуждаться в цифрах по обе стороны от указанной цифры. Как в их примере, 4. Так что верните 3 и 5. Хотя не уверен ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню