Вам не нужно использовать 'назад', т.е .:
$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»
спасибо, это работает! не должно быть [...] кроме ',' или '/'? – Driver
@Driver Все, что указано в '[^]', будет отменено. Таким образом, чтобы соответствовать чему-либо, кроме ',' или '/', мы должны указывать его как '[^, \ /]' – nu11p01n73R