php: как найти числа в строке?


У меня есть несколько строк, таких как:

some words 1-25 to some words 26-50
more words 1-10
words text and words 30-100

Как я могу найти и получить из строки все "1-25" и "26-50" и больше

3 2

3 ответа:

Если это целые числа, сопоставьте несколько цифр: \d+. Для соответствия всему диапазону выражение: (\d+)-(\d+).

Возможно, вы также хотите разрешить пробелы между тире и числами:

(\d+)\s*-\s*(\d+)

И, возможно, вы хотите убедиться, что выражение стоит свободно, то есть не является частью слова:

\b(\d+)\s*-\s*(\d+)\b

\b это совпадение нулевой ширины и тесты для границ слов. Это выражение запрещает вещи вроде "Some1 -2text", но допускает "Some 1-2 text".

Это можно сделать с помощью регулярных выражений:

echo preg_match_all('/([0-9]+)-([0-9]+)/', 'some words 1-25 to some words 26-50 more words 1-10 words text and words 30-100', $matches);
4
print_r($matches);
Array
(
    [0] => Array
        (
            [0] => 1-25
            [1] => 26-50
            [2] => 1-10
            [3] => 30-100
        )

    [1] => Array
        (
            [0] => 1
            [1] => 26
            [2] => 1
            [3] => 30
        )

    [2] => Array
        (
            [0] => 25
            [1] => 50
            [2] => 10
            [3] => 100
        )

)

Для каждого диапазона первое значение находится в массиве [1], а второе-в массиве[2] с тем же индексом.

Я думаю, что этой строки достаточно

preg_replace("/[^0-9]/","",$string);