Regex &

2 Cevap php

Benim web sitesi için bazı BBcode'la üzerinde çalışıyorum.

Ancak [QUOTE] etiketi bana biraz keder veren, mükemmel bir çalışma kodları en iyi şekilde idare ettik.

Ben böyle bir şey olsun:

[QUOTE=1]
[QUOTE=2]
This is a quote from someone else
[/QUOTE]
This is someone else quoting someone else
[/QUOTE]

Bu dönecektir:

> 1 said:  [QUOTE=2]This is a quote from
> someone else

This is someone else quoting someone else[/QUOTE]

Peki ne oluyor iç içe alıntı [/ quote] alıntı bloğu kapanış olduğunu.

Ben kullanıyorum Regex olduğunu:

"[quote=(.*?)\](.*?)\[/quote\]'is"

Nasıl bu kadar iç içe Tırnaklar düzgün görünecek yapabilir?

Teşekkür ederim.

2 Cevap

Sen (kendi değişmek göre libpcre-3.0 beri mevcut) özyinelemeli düzenli ifadesini oluşturmak olabilir:

\[quote=(.*?)\](((?R)|.)*?)\[\/quote\]

Eğer codeka tavsiye takip @ Ama eğer daha iyi olurdu.

Update: (?R) here means «insert the whole regular expression in place where (?R) occurs». So a(?R)?b is equivalent (if you forget about capturing groups) to a(a(?-1)?b)?b which is equivalent to a(a(a(?-1)?b)?b)?b and so on. Instead of (?R) you can use (?N), (?+N), (?-N) and (?&a) which means «substitute with N'th capturing group», «substitute with N'th next capturing group», «substitute with N'th previous capturing group» and «substitute with capturing group named «a»».

Bu gerçekten normal ifadeler için iyi bir görev değildir. Bu almost düzenli ifadeler ile HTML ayrıştırmak çalışıyor gibi, and we know what happens when you do that ...

Eğer could, yapmak, ve o zaman bile ben tüm bu harika bir fikir olduğunu sanmıyorum kullanmak için ne preg_split etiketleri-ve-olmayan-etiketleri içine girdi metni bölmek. Yani böyle bir liste ile bitireceğiz:

  • [= 1 QUOTE]
  • (Boş)
  • [= 1 QUOTE]
  • Bu başkasından bir alıntı
  • [/ QUOTE]
  • Bu başkası başkası alıntı olduğunu
  • [/ QUOTE]

Sonra HTML etiketlerini dönüştürme ve değiştirilmemiş düz metin çıktısı listesinde çalıştırmak. Hatta fantezi olsun ve "yuva" sayıları tutabilir böylece bir "[/ alıntı]" Bunu beklemiyordum olduğunuzda, sadece geçersiz HTML çıktısı biraz daha iyi durumu idare edebilir karşılaşırsanız. Alternatif olarak, onları bulmak ve izin gibi sadece çıkış şeyler HTMLPurify ya da geç temiz bir şey.