Maybe this:
; parser by CAB multi char delim, match "xyz"
(defun sparser (str delim / dlen ptr lst)
(setq dlen (1+ (strlen delim)))
(while (setq ptr (vl-string-search delim str))
(setq lst (cons (substr str 1 ptr) lst))
(setq str (substr str (+ ptr dlen)))
)
(reverse(cons str lst))
)
(sparser "Abc\\pefg\\pPPP" "\\p")
("Abc" "efg" "PPP")