Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Preg_replace pomoc z wyrażeniem regularnym
Forum PHP.pl > Forum > PHP
momo666
Witam. Łącze dwa fora, jedno z SMF, a drugie z phpBB3. Załatwiłem już praktycznie całą konwersję, ale pozostał jeden problem. W bazie z phpBB BBCode są jakoś dziwnie zapisywane. To jest np. zamiast tradycyjnego
Kod
[b][/b]

mamy:
Kod
[b:abcd1234][/b:abcd1234]

czyli dodawany jest dwukropek i 8 znaków z przedziału a-z + 0-9. Nie wiem czy to jakiś hash czy co, w każdym bądź razie chciałbym się tego pozbyć, bo SMF wogóle tego nie rozpoznaje.
Postanowiłem przelecieć po wszystkich postach i preg_replace'm pozmieniać ten dwukropek, 8 alfanumów i nawias zamykajacy na sam nawias. Użyłem takiego wyrażenia regularnego:
Kod
/^:([a-z0-9]){8}\]$/D

niestety nie jest ono ok, mimo że mi się wydaje właściwe (próbowałem też kilkanaście innych wariantów), ma ktoś jakiś pomysł co może być z tym nie tak? Z góry dzięki za pomoc.
r4xz
/^sad.gif[a-z0-9]){8}\]$/

^ - początek

$ - koniec

może bez tych znaków będzie dobrze? winksmiley.jpg

momo666
Tak też już próbowałem. Nic to nie daje.

PS. Jakby ktoś pytał, reszta kodu jest dobrze, bo jeśli użyję str_replace() zamiast preg_replace() i podam konkretny przykład to go elegancko wywala z treści posta.
wookieb
Try this
  1. $tekst = '[b:abcd1234 ][/b:abcd1234]';
  2.  
  3. echo preg_replace('/\[(\/)?([a-z0-9]+).*?\]/', '[$1$2]', $tekst);
momo666
Gro i bucy biggrin.gif Dzięki wielkie.

Mała poprawka. Wyrażenie co prawda pasuje do tego wzorca którego chce się pozbyć, ale pasuje też do adresów w tagach url, przez co wycieło mi sporą część linków. Jak to ograniczyć, zeby brało pod uwagę tylko ciągi zawierające właśnie ten dwukropek, 8 znaków alfanumerycznych i nawias kwadratowy zamykający?
wookieb
  1. $tekst = '[url="test":abcd1234 ][/b:abcd1234]';
  2.  
  3. echo preg_replace('/\[(\/)?([^\:]+).*?\]/', '[$1$2]', $tekst);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.