» »

[Java] Regularni izraz

[Java] Regularni izraz

iMark ::

Pozdravljeni,

Prosim, če mi kdo pomaga sestavit regularni izraz, ki bo prebral vsebino celice v HTML tabeli.
Konkretno iz take vrstice:
<td class='x' width='70'><a href='x' class='x'><u>text text</u></td>

Torej tu bi rad dobil vn string "text text".

Hvala in lep pozdrav,
Mark

jan_g ::

<u>(.*)</u>


T.i. požrešni kvantifikator (zvezdica) je v oklepaju zato, ker s tem ustvariš capture grupo, ki jo potem lahko dobiš ven z Matcher.group() metodo. Je pa skoraj vedno za strukturiran text (kot so html, xml, json, ...) pametno uporabljati temu namenjene parserje.

iMark ::

Najlepša hvala :)

Spura ::

Narobe.
<u>(.*?)</u>

Zgodovina sprememb…

  • spremenil: Spura ()

jan_g ::

Ja, ok, lahko tudi reluctant quantifier, da vzameš prvo namesto najdaljše ujemanje. Odvisno od primera, če greš vrstico po vrstico ali celoten text.

Spura ::

Nic ni odvisno od primera. Tudi ce beres vsako vrstico posebi, si pripravljen tvegat naslednji scenarij?
<tr><td class='x' width='70'><a href='x' class='x'><u>text text</u></td><td class='x' width='70'><a href='x' class='x'><u>drug text</u></td></tr>

A mislis, da v generiranem HTMLju vsak TD dobi svojo vrstico? Tvoj regex bo matchal:
text text</u></td><td class='x' width='70'><a href='x' class='x'><u>drug text

jan_g ::

Ne, ne bi (manjka ti še zaklučni b tag). Bi pa tvoj matchal premalo, če bi v td-ju imel zaporedne tekste, pri čemer bi nekateri bli boldani, nekateri pa ne. Brezveze se zaganjaš, v splošnem problema z regexom skoraj ni možno rešiti, razen če uporabiš še backtracking, ampak potem dobiš nerazpoznavno klobaso.

Zgodovina sprememb…

  • spremenil: jan_g ()

Spura ::

jan_g je izjavil:

Brezveze se zaganjaš, v splošnem problema z regexom skoraj ni možno rešiti

No shit. Ampak v splosnem se itak ne gres tega, ce nisi ziher, da ni gnezdenih tagov ki jih isces. In ce bi imel znotraj enega TD elementa vec underlined (ne boldano) U elementov, bi moj regex pravilno matchal po zahtevah OPja, vsebino vseh takih tagov, tvoj pa zopet narobe. Tudi ce ima reluctant izraz v kakem scenariju napacno delovanje je verjetnost napacnega delovanja greedy izraza stokrat vecja. Pac se ena Regex tema na Slo-Techu, kjer folk pise prvo stvar k pade na pamet. Da performans greedy izrazov ne omenjamo.

jan_g ::

Ne, tvoj ne bi v tem primeru matchal pravilno, ker bi vzel zgolj prvo ujemanje.

Edit: ostalo pobrisal, ker je za take škoda energije.

Zgodovina sprememb…

  • spremenil: jan_g ()


Vredno ogleda ...

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

[C#] Regex - samo decimalne vrednosti

Oddelek: Programiranje
91367 (1065) FrEaKmAn
»

regex kombinacija negative, positive look behind ...

Oddelek: Programiranje
141445 (1165) MrBrdo
»

[Java]: replace - slovar v txt

Oddelek: Programiranje
121704 (1562) Spura
»

Python separiranje besed v stavkih

Oddelek: Programiranje
91185 (999) Meizu
»

jQuery load

Oddelek: Izdelava spletišč
61599 (1516) MrBrdo

Več podobnih tem