У меня проблема со следующим кодом:
$input = '#2weeksago #1year&2weeksold #keyword';
$output = preg_replace('/(?:.^|\s)#(\w+)/', ' <span class = "hashtag">#$1</span>', $input);
print($output);
Я хочу, чтобы каждое слово в хэштеге было окружено атрибутом span. Это работает для большинства ключевых слов, но хэштеги с символом в нем не работают.
Выход
<span class = "hashtag">#2weeksago</span> <span class = "hashtag">#1year</span>&2weeksold <span class = "hashtag">#keyword</span>
Может кто поможет расширить эту preg_replace?






Если вы не хотите разрывать «границы слова», но продолжаете сопоставление до следующего символа пробела, вам нужно сделать именно это:
<?php
$input = '#2weeksago #1year&2weeksold #keyword';
$output = preg_replace('/(?:.^|\s|^)#([^\s]+)/', ' <span class = "hashtag">#$1</span>', $input);
print($output);
Очевидно, что результат:
<span class = "hashtag">#2weeksago</span> <span class = "hashtag">#1year&2weeksold</span> <span class = "hashtag">#keyword</span>
Именно то, что мне нужно! Спасибо
Каков желаемый результат и как определить «слово» для начала?