Добавьте setuid (0) в скрипт и скомпилируйте его. Он должен работать после этого.
$ cat wrapper.c
int main(void)
{
setuid(0);
system("/bin/bash ./should_run_as_root.sh");
}
$ gcc -o wrapper wrapper.c
$ sudo chown root wrapper
$ sudo chmod ug+s wrapper
$ ll wrapper
-rwsr-sr-x 1 root users 6667 2009-02-17 11:11 wrapper
$
$tweet = "this has a #hashtag a #badhash-tag and a #goodhash_tag";
preg_match_all("/(#\w+)/", $tweet, $matches);
var_dump( $matches );
* Дефисы являются недопустимыми символами для хэштегов, знаки подчеркивания разрешены.
Попробуйте это регулярное выражение:
/#[^\s]*/i
Или используйте это, если есть несколько хэш-тегов, объединенных вместе (например, #foo#bar).
/#[^\s#]*/i
Запуск этого PHP будет выглядеть так:
preg_match_all('/#[^\s#]*/i', $tweet_string, $result);
Результатом будет массив, содержащий все хэштеги в твите (сохраняется как "$result" - третий аргумент).
Наконец, загляните на этот сайт. Я нашел его очень удобным для тестирования регулярных выражений. http://regex.larsolavtorvik.com/
EDIT: Я попробовал ваше регулярное выражение, и оно тоже отлично сработало!
EDIT 2: Добавлено еще одно регулярное выражение для извлечения хэш-тегов, даже если они идут подряд.
Используйте preg_match_all ()
функция:
function get_hashtags($tweet)
{
$matches = array();
preg_match_all('/#\S*\w/i', $tweet, $matches);
return $matches[0];
}