Я хотел бы сохранить только строку, которая начинается с # или @
Поэтому сопоставляйте только @susui или удаляйте текст вокруг него. PHP или JavaScript.
В зависимости от того, как вы определяете «слово», вы, вероятно, хотите
(?<=\s|^)[@#]\S+
или
(?<=\s|^)[@#]\w+
Объяснение:
(?<=\s|^) # Assert that the previous character is a space (or start of string) [@#] # Match @ or # \S+ # Match one or more non-space characters (or \w+) # Match one or more alphanumeric characters.
Итак, в PHP:
preg_match_all('/(?<=\s|^)[@#]\S+/', $subject, $result, PREG_PATTERN_ORDER);
дает вам массив $result
из всех совпадений в строке $subject
. В JavaScript это не будет работать, потому что lookbehinds (часть «Assert …» от начала регулярного выражения) не поддерживаются.