» »

regular expression challange

regular expression challange

MasterBlaster ::

Zanima me, če kdo ve, kako bi napisal regular expression, ki bi mi match-al celo tabelo v html kodi, ki ima nastavljeno ime (< table name="ime" >...< /table >). Pri tem pa lahko tabela vsebuje poljubno kodo. Tudi poljubno število tabel!

Problem je seveda v tem, kako najti konec, če tabela vsebuje eno ali več tabel. Vsaka od teh tudi vsebuje "< /table >".
  • spremenil: Senitel ()

darh ::

Mislm da bo to nemogoče v enem reg-exprešnu naredit... a maš možnost naredit to v programu? php mogoče?
Excuses are useless! Results are priceless!

MasterBlaster ::

Sej se mi je zdelo, sam še ne poznam teh RegExp tolk v detajle.

Programsko pa že mam rešeno, sam pa bi verjetno bil RegExp hitrejši.

darh ::

kkhm... načeloma ne... sicer se izkaže pri nekaterih primerih v PHPju da je regexp (vsaj PERL style) napram scanf() precej hitrejši.. samo to verjetno ne velja za bolj komplexne paterne... ne vem .. mi je pa bolj pri srcu rexexp kt pa kej drugega :)

Sej če ugotoviš kako si zapomnit vsako naknadno <table> in pol odštet k prideš do &lt/table> pol bi se dalo.. samo to pa presega moje znanje regexp...
Excuses are useless! Results are priceless!

JerKoJ ::

PHP Pattern Syntax Poglavje Repetition

By default, the quantifiers are "greedy", that is, they
match as much as possible (up to the maximum number of permitted
times), without causing the rest of the pattern to
fail. The classic example of where this gives problems is in
trying to match comments in C programs. These appear between
the sequences /* and */ and within the sequence, individual
* and / characters may appear. An attempt to match C comments
by applying the pattern

/\*.*\*/

to the string

/* first command */ not comment /* second comment */

fails, because it matches the entire string due to the
greediness of the .* item.


Torej jest videm problem ne v vgenzdenih tabelah ampak
v tabelah k so mogoce vzporedne prvi.
Ce torej nimas vec tabel enako mocnih npr:
"<"table">" neki tut table mozne "<"/table">" pol bo ziher matchu na zadnjo "<"/table">" ce pa se vmes prva tabela konca in zacne nova pa stvar ne deluje vec.
Se da pokazat da je za to stvar reg exp (v katerem koli jeziku) premal mocen in se tega pa z njim ne da narest.

Zgodovina sprememb…

  • spremenil: JerKoJ ()

b ::

Mnja...verjetno bi se dalo tudi z regexi, Perl ima z vsako verzijo mocnejsi regex engine, ampak meni se zdi bolj enostavno, da isces <table>, ter ko ga dobis incrementas en counter ter ko dobis </table> counter decrementas. Ko je counter nazaj na 0, si prebral celo tabelo. Ce hoces tabelo zbrisat iz teksta, potem enostavno takrat ko je counter vecji od 0 ne izpisujes nic, oz. obratno, ce hoces dobit samo tabelo, potem takrat ko je counter vecji od 0 podatke nekam pises.

Definitivno bo boljse tako, bo vsaj tisti, ki bo za tabo kodo bral, vedel kaj si hotel naredit, pa ce naredis prav ali narobe :-)

lp,
Borut.

Zgodovina sprememb…

  • spremenilo: b ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Javascript - izračun razlike v datumih

Oddelek: Programiranje
81928 (1783) kogledom
»

c# regularni izraz

Oddelek: Programiranje
202029 (1727) darkolord
»

Url validation - Java Script

Oddelek: Programiranje
161529 (1413) Trubadur
»

PHP Manual

Oddelek: Izdelava spletišč
141688 (1364) Tody
»

Pomoč pri MySQL in PHP...

Oddelek: Programiranje
161822 (1690) darh

Več podobnih tem