php получить число из строки

у меня есть эта строка

@[123:peterwateber] привет, 095032sdfsdf! @[589:zzzz]

Я хочу получить 123 и 589, как вам это, используя регулярное выражение или что-то в PHP?

Примечание: peterwateber и zzzz являются лишь примерами. следует рассматривать любую случайную строку


person Peter Wateber    schedule 06.05.2012    source источник


Ответы (3)


Не забывайте о просмотре вперед, чтобы не совпадать с 095032:

$foo = '@[123:peterwateber] hello there 095032sdfsdf! @[589:zzzz]';
preg_match_all("/[0-9]+(?=:)/", $foo, $matches);
var_dump($matches[0]); // array(2) { [0]=> string(3) "123" [1]=> string(3) "589" }
person AlienWebguy    schedule 06.05.2012

Следующее регулярное выражение будет извлекать один или несколько числовых символов в строке:

preg_match_all('#\d+#', $subject, $results);
print_r($results);
person rjz    schedule 06.05.2012

Существует функция preg_match_all.

Первый параметр принимает регулярное выражение. В следующем примере показано «соответствие хотя бы одной цифре, за которой следует любое количество цифр». Это будет соответствовать числам.

Второй параметр - это сама строка, тема, из которой вы хотите извлечь

Третий — это массив, в котором будут находиться все совпадающие элементы. Таким образом, первый элемент будет равен 123, второй — 589 и так далее.

    preg_match_all("/[0-9]+/", $string, $matches);
person Nikhil Baliga    schedule 06.05.2012
comment
эй .. Я забыл упомянуть, что в моем посте мой приоритет в получении числа в строке совпадает, когда найден @[123: текст здесь] - person Peter Wateber; 06.05.2012
comment
Мне жаль, что я этого не понял. Не могли бы вы быть немного более ясным? Вы хотите, чтобы числа были напечатаны? - person Nikhil Baliga; 06.05.2012
comment
@[123:peterwatereber] preg_match_all должен быть основан. если строка hello nikhil @[123:peterwateber] это 6 мая, вывод должен быть 123, когда preg_match_all. Следовательно, 123 должно получиться в строке, которая имеет следующее значение @[число:строка] - person Peter Wateber; 06.05.2012
comment
О, тогда используйте это - preg_match_all(/@[[0-9]+:[A-Za-z]+]/, $string, $matches); В нем говорится - получить «@», за которым следуют открытые квадратные скобки, одна или несколько цифр, за которыми следует двоеточие, за которым следует один или несколько символов (верхний и нижний регистр), за которыми следует закрытие квадратной скобки. Затем выполните предыдущее совпадение preg с результатом этого. - person Nikhil Baliga; 06.05.2012