regexp сохранить / сопоставить любое слово, начинающееся с определенного символа

Я хотел бы сохранить только строку, которая начинается с # или @

  1. foobar @sushi – wasabi
  2. foobar #sushi – хрен

Поэтому сопоставляйте только @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 …» от начала регулярного выражения) не поддерживаются.