Witam,
Chciałem napisać funkcję która zmieni mi treść: #tag na <span>#tag</span>

Przy czym, jeśli użytkownik wpisze sam, to zrobi to za niego JS (w 95% przypadków). Pozostałe 5% przypadków chciałem obsłużyć za pomocą PHP.

  1. preg_match_all('/\<span class="tag-mention-form"\>#(.*?)\<\/span\>/i',$content,$matches);

Wyłapie mi wszystkie wystąpienia <span>#tag</span>

A jak sprawić aby wyłapało mi #tag gdy nie ma (wystarczy) przed nim <span>?
Mam taką konstrukcję (później zostanie zastąpione przez preg_replace - tak łatwiej się testuje):
  1. preg_match_all('/(?!\<span class="tag-mention-form"\>)#(.*?) /i',$content,$matches);


Dla testowego stringu:
<p>fdfs dfd sjki&nbsp; #asda sdfasdfs @ <span class="tag-mention-form">#grzemach</span>&nbsp; #asda</p>

Zwraca mi:
#asda
#grzemach


Prawidłowo zwraca, tylko część (.*?) łapie też wszystko do spacji.... i przed tym zapytaniem... a jest tylko jedno #asda, gdyż tak są flagi ustawione.... wszystko jest już jasne. Wątek można zakną i usunąć.