У меня есть форум, который поддерживает хэштеги. Я использую следующую строку, чтобы преобразовать все хэштеги в ссылки. Я использую шаблон (^|\(|\s|>)
, чтобы избежать именованных якорей в URL-адресах.
$str=preg_replace("/(^|\(|\s|>)(#(\w+))/","$1<a href=\"/smalltalk.php?Tag=$3&".SID."\">$2</a>",$str);
Я использую эту строку для подбора хэштегов, чтобы сохранить их в отдельном поле, когда пользователь отправляет свое сообщение, это подбирает все хэштеги, КРОМЕ тех, которые находятся в начале новой строки.
preg_match_all("/(^|\(|\s|>)(#(\w+))/",$Content,$Matches);
Использование модификаторов m
и s
не имеет никакого значения. Что я делаю не так во втором случае?
Редактировать: вводимый текст может быть обычным текстом или HTML. Пример ввода задачи:
#startoftextreplacesandmatches #afterwhitespacereplacesandmatches <b>#insidehtmltagreplacesandmatches</b> :)
#startofnewlinereplacesbutdoesnotmatch :(
a #<!-- edit later -->ta<!-- here, too -->g this is
, который, вероятно, будет хэштегом#tag
. Если это так (или некоторые другие распространенные вещи, которые могут произойти), вас может заинтересовать этот вопрос и ответ: Игнорировать теги html в preg_replace а> - person hakre   schedule 02.09.2012