2009-08-25 2 views
1

У меня есть следующая строка:PHP Regex Справка для хэштегов

$str = '#hello how are #you and #you and #you'; 

Я хотел бы, чтобы обернуть некоторый HTML вокруг тех, которые имеют хэш-тег перед ними, для exampe:

echo preg_replace("/#([A-Za-z0-9_]+)(?=)/", "<a href='http://url.com/$1'>$0</a>", $str); 

Что будет:

#hello, как это #you и #you и

# Вы

Обратите внимание, что в каждой ссылке URL не указан хэш-тег в ссылке.

Однако это моя проблема, потому что в конце последнего нет места, потому что оно не соответствует регулярному выражению и, очевидно, не включается. Я не уверен, что делать на самом деле, поскольку некоторые могут иметь пробелы после, а некоторые - нет, но я не хочу включать пробел в результат (следовательно, (? =)), Но я не знаю, что еще я сможет сделать.

Любая помощь была бы принята с благодарностью.

Заранее спасибо

ответ

3

использования (\ S | \ Z) это будет соответствовать либо пробелы или конец-линии

+0

Ничего себе, спасибо за ваш быстрый и очень хороший ответ. Я сделал еще одну модификацию, чтобы не включать пробелы в возвращаемые URL-адреса, поэтому последнее регулярное выражение: /@ ([A-Za-z0-9 _] +) (? = \ S | \ Z)/ Отлично, большое спасибо ennuikiller. Есть ли что-нибудь, что я могу сделать для вас, как знак благодарности? –

+0

@ jamie ваша оценка более чем достаточно жест! Может быть, вы ответите на один из моих вопросов не раз! – ennuikiller

+0

Я имел в виду «следующее» время, конечно! – ennuikiller

1

Вы можете переключить селектор в режим исключения, такие как ([^, .] +). Таким образом, он должен работать для всех экземпляров.

+0

Спасибо за ваш ответ, я также пробовал это, а также работает так же, как и указанное выше регулярное выражение (см. Комментарий в приведенном выше ответе). Еще раз спасибо за ваш быстрый ответ! –

Смежные вопросы