import re


def find_all_occurrences(source, target, boundary=True):
    """
    Find all occurrences of `target` in `source`

    :param source: the source string to search within.
    :type source: :class:`str`
    :param target: the target string to search for.
    :type target: :class:`str`:

    :return: list of positions at which `source` occurs in `target`.
    :rtype: :class:`list` of :class:`int`
    """
    positions = []
    if boundary:
        results = re.finditer(r"\b" + re.escape(target) + r"\b", source)
    else:
        results = re.finditer(r"\b" + re.escape(target), source)
    for match in results:
        positions.append(match.start())
    return positions