У меня есть несколько строк:
some words 1-25 to some words 26-50 more words 1-10 words text and words 30-100
как я могу найти и получить из строки все «1-25» и «26-50» и более
Если это целые числа, сопоставьте несколько цифр: \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);