return $msg;
}
+
+ /**
+ * Returns the character positions of the provided boundaries, optionally skipping a number of first occurrences
+ *
+ * @param string $text Text to search
+ * @param string $open Left boundary
+ * @param string $close Right boundary
+ * @param int $occurrences Number of first occurrences to skip
+ * @return boolean|array
+ */
+ public static function getBoundariesPosition($text, $open, $close, $occurrences = 0)
+ {
+ if ($occurrences < 0) {
+ $occurrences = 0;
+ }
+
+ $start_pos = -1;
+ for ($i = 0; $i <= $occurrences; $i++) {
+ if ($start_pos !== false) {
+ $start_pos = strpos($text, $open, $start_pos + 1);
+ }
+ }
+
+ if ($start_pos === false) {
+ return false;
+ }
+
+ $end_pos = strpos($text, $close, $start_pos);
+
+ if ($end_pos === false) {
+ return false;
+ }
+
+ $res = ['start' => $start_pos, 'end' => $end_pos];
+
+ return $res;
+ }
}