диапазон номеров в регулярном выражении - PullRequest
2 голосов
/ 23 июня 2009

У меня может быть дыра в моих знаниях регулярных выражений.

Если я пытаюсь найти элементы в строке, которые могут находиться в числовом диапазоне «item [355-502]», есть простой способ сделать это. насколько я могу судить, мне нужно сделать что-то вроде

 (35[5-9]|3[6-9][0-9]|4[0-9][0-9]|50[0-2])

Я знаю, это также соответствует 3550-5020 и т. Д., Что должно быть хорошо

Это, указывает, что это не может быть сделано любым другим способом, верно? я нахожусь в PHP есть более аккуратный способ сделать это?

Ответы [ 3 ]

9 голосов
/ 23 июня 2009

Это числовая проблема, а не строковая проблема, поэтому я боюсь, что ваше решение не лежит полностью в регулярном выражении!

Вам нужно будет проанализировать цифры и затем выполнить числовое сравнение, например ::100100

$input = whatever(); # gets something like "item[456]"

... затем сопоставьте со следующим шаблоном:

preg_match("/item\[(\d+)\]/", $input, $match);

... чтобы сохранить цифры в памяти, а затем:

if($match[1] >= 355 and $match[1] <= 502){...

чтобы проверить, находится ли число в диапазоне.

3 голосов
/ 23 июня 2009

Единственный другой способ, который я могу придумать, - это сделать регулярное выражение простым (элемент [0-9] {3}) и выполнить остальную часть проверки в коде. Регулярные выражения не могут решить все проблемы:)

1 голос
/ 23 июня 2009

Как насчет сопоставления цифр и последующего сравнения чисел?

vinko@mithril:~$ more val.php
<?php
function validateItem($item) {

    $matches = array();
    preg_match("/item(\d+)/",$item, $matches);
    if ($matches[1] < 355 || $matches[1] > 502) return false;
    return true;

}

var_dump(validateItem("item305"));
var_dump(validateItem("item355"));
var_dump(validateItem("item356"));
var_dump(validateItem("item5454"));
?>
vinko@mithril:~$ php val.php
bool(false)
bool(true)
bool(true)
bool(false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...