$var="Some text on some more text before some text";
preg_match('/\bon\b(.*)\bbefore\b/',$var,$match);
//Edit: You can use `(.+)` too if, by any chance, there is no text between 'on' and 'before'.
print_r ($match);
//$match[1] has "some more text"
Это то, что вы хотите?
, а что касается позиции, вы можете echo strrpos($var, " on ");
, если я правильно понял (как вы сказали в комментарии, что "на" есть пробелывокруг него. echo strrpos($var, "before");
тоже, это вернет позицию первого символа.