2015-05-04 2 views
4

Это моя строка:preg_match просмотра назад после второго слэша

stringa/stringb/123456789,abc,cde 

и после preg_match:

preg_match('/(?<=\/).*?(?=,)/',$array,$matches); 

выхода есть:

stringb/123456789 

Как я могу изменить мой preg_match, чтобы извлечь строка после второй косой черты (или после последней косой черты)?

Желаемый результат:

123456789 

ответ

4

Вы можете соответствовать ничего, кроме как /

/(?<=\/)[^\/,]*(?=,)/ 
  • [^\/,]* отрицается класс символов соответствует ничего, кроме , или \

Regex Demo

Пример

preg_match('/(?<=\/)[^\/,]*(?=,)/',$array,$matches); 
// $matches[0] 
// => 123456789 
+0

спасибо, это работает! не должно быть [...] кроме ',' или '/'? – Driver

+0

@Driver Все, что указано в '[^]', будет отменено. Таким образом, чтобы соответствовать чему-либо, кроме ',' или '/', мы должны указывать его как '[^, \ /]' – nu11p01n73R

2

Это должно сделать это.

<?php 
$array = 'stringa/stringb/123456789,abc,cde'; 
preg_match('~.*/(.*?),~',$array,$matches); 
echo $matches[1]; 
?> 

Игнорирование все до последней косой черты (.*/). После того, как найден последний косой чертой, сохраняйте все данные до первой запятой ((.*?),).

0

Вам не нужно использовать 'назад', т.е .:

$string = "stringa/stringb/123456789,abc,cde"; 
$string = preg_replace('%.*/(.*?),.*%', '$1', $string); 
echo $string; 
//123456789 

Демо:

http://ideone.com/IxdNbZ


Regex Объяснение:

.*/(.*?),.* 

Match any single character that is NOT a line break character «.*» 
    Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
Match the character “/” literally «/» 
Match the regex below and capture its match into backreference number 1 «(.*?)» 
    Match any single character that is NOT a line break character «.*?» 
     Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?» 
Match the character “,” literally «,» 
Match any single character that is NOT a line break character «.*» 
    Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 

$1 

Insert the text that was last matched by capturing group number 1 «$1» 
Смежные вопросы