דבר ראשון אם אתה משתמש בביטוי רגולרי אז תוסיף U אחרי הסלאש האחרון - אתה לא רוצה שאם יהיה:
abcdffgd
אז לפי מה שהוא נתן הוא יתפוס לך את a
bcdffgd.
דבר שני - תומר צודק ואכן עדיף להימנע משימוש בביטויים רגולרים מכיוון שהם לוקחים הרבה יותר משאבים - ולרוב יש פתרונות יצירתיים וטובים יותר.
במקרה הזה, אפשר להשתמש ב-2 פונקציות:
substr + strpos
substr כמו שכתבת היא אכן לוקחת סטרינג ולוקחת את התווים ממקום מסויים לפי האורך שקבעת.
הפונקציה strpos מוצאת את ההופעה הראשונה של טקסט בתוך טקסט ומחזירה אותה (ויש אפשרות להגביל אותה להתחיל לחפש רק מתו מסויים).
בעצם אתה אומר כאן, "תחתוך לי מהפעם הראשונה שמופיע a, עד הפעם שמופיע ה-d הראשון אחרי ה-a הזה".
PHP קוד:
$first = strpos($string, "a");
$str = substr($string, $first, strpos($string, "d", $first) - $first);