Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Preg_replace pomoc z wyrażeniem regularnym
momo666
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 15.09.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
r4xz
post
Post #2





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

Ostrzeżenie: (0%)
-----


/^sad.gif[a-z0-9]){8}\]$/

^ - początek

$ - koniec

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



--------------------
Go to the top of the page
+Quote Post
momo666
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 15.09.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Try this
  1. $tekst = '[b:abcd1234 ][/b:abcd1234]';
  2.  
  3. echo preg_replace('/\[(\/)?([a-z0-9]+).*?\]/', '[$1$2]', $tekst);


--------------------
Go to the top of the page
+Quote Post
momo666
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 15.09.2009

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
wookieb
post
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. $tekst = '[url="test":abcd1234 ][/b:abcd1234]';
  2.  
  3. echo preg_replace('/\[(\/)?([^\:]+).*?\]/', '[$1$2]', $tekst);


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 19:31