2013-08-30 3 views
1

У меня есть строка, что мне нужно, чтобы соответствовать, который может быть в различных форматах:PHP регулярного выражения и preg_match

5=33 
5=14,21 
5=34,76,5 
5=12,97|4=2 
5=35,22|4=31,53,71 
5=98,32|7=21,3|8=44,11 

мне нужна цифры, которые появляются между знаком равенства (=) и трубами (|) символ , или до конца строки. Поэтому в последнем примере мне нужны 98, 32, 21, 3, 44, 11, но я не могу понять это вообще. Числа не являются конкретными, они могут быть любым количеством чисел.

Я просто изучаю regex и preg_match и не могу понять это. Я понятия не имею, что я делаю.

Любые вопросы и ответы Очень оценен.

ответ

1

Описание

Это выражение будет:

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

\d+(?=[,|\n\r]|\Z)Live Demo

enter image description here

NODE      EXPLANATION 
-------------------------------------------------------------------------------- 
    \d+      digits (0-9) (1 or more times (matching 
          the most amount possible)) 
-------------------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
-------------------------------------------------------------------------------- 
    [,|\n\r]     any character of: ',', '|', '\n' 
          (newline), '\r' (carriage return) 
-------------------------------------------------------------------------------- 
    |      OR 
-------------------------------------------------------------------------------- 
    \Z      before an optional \n, and the end of 
          the string 
-------------------------------------------------------------------------------- 
)      end of look-ahead 

Примеры

Образцы

С помощью этого выражения строка 5=98,32|7=21,3|8=44,11 возвращает массив строк:

[0] => 98 
[1] => 32 
[2] => 21 
[3] => 3 
[4] => 44 
[5] => 11 



Или

Вы можете просто посмотреть на все номера, которые не следуют знак равенства

\d+(?!=|\d)Live Demo

enter image description here

+0

Спасибо, Denomales, я только что узнал! –

3

Попробуйте ниже:

preg_match_all('/(?<==)[^|]*/', $string, $matches); 
var_dump($matches); 
Смежные вопросы