Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: RegEx: Sanan haku (ei muun sanan osana)

AkeMake [01.11.2016 23:24:27]

#

En oikein osannut nimetä ongelmaani paremmin. Haluan siis löytää tekstistä sanan 'uusi', mutta jostain syystä en löydä sopivaa RegEx lausetta.

Pääajatus on se, että haen RegEx lauseen tietokannasta ja sijoitan sen preg_match_all:iin. Viimeisimmät yritykseni oli näillä lauseilla:

/(?: |^)(uusi?[ $]|käyttämätön|avaamaton)/i
/(?:\b|^)(uusi?|käyttämätön|avaamaton)(?:\b|$)/i

Lisäksi on tullut kokeiltua monia tämän tyylisiä lauseita. Ongelma ilmenee ainakin silloin, kun teksti alkaa (tai loppuu) sanalla 'Uusi', ehkä muulloinkin. Pointti on siis se, että haluan löytää tekstistä sanan 'uusi' (tai 'uus'), 'käyttämätön' tai 'avaamaton'. Muuten noita ei tarvitsisi tunnistaa omiksi sanoikseen, mutta 'uusi' ja erityisesti 'uus' esiintyy niin helposti muiden sanojen osana, että se pitää tunnistaa omana sananaan.

Kuvittelin osaavani RegExiä tämän verran, mutta näköjään ei kuitenkaan. Vai onkohan ongelma kuitenkin jossain muualla esim tietokannasta hakemisessa tai jossain muualla koodissani? Olen kyllä koettanut paikallistaa ongelmaa ja se vaikuttaisi olevan tässä RegEx-lauseessa.

groovyb [02.11.2016 00:40:32]

#

\b(uusi|käyttämätön|avaamaton)\b

Esimerkki

AkeMake [02.11.2016 07:29:10]

#

Jaa sen pitäisi kuitenkin mennä noin yksinkertaisesti. Aloin tuon vastauksen jälkeen taas tutkia koodiani ja selvisi, että vika oli tosiaan muualla koodissani eikä tässä RegEx-lauseessa. Noilla aikaimmillakin RegEx lauseilla tämä olisi luultavasti toiminut ihan hyvin.

Harmillisen usein vastaus on niin simppeli, että ihan nolottaa. Virhe tuli siinä, että tutkin if lausekkeessa josko vähintään toinen preg_match tai preg_match_all osuu. Sen jälkeen tutkin oliko preg_match_all:ssa määrittelemäni $matches tyhjä. No olihan se tyhjä aina siinä tapauksessa, että molemmat preg_match ja preg_match_all osuivat, koska preg_match oli if lausekkeessa ensin eikä siten preg_match_all:iin tarvinnut mennä ollenkaan. Niinpä minulle näytti siltä, ettei preg_match_all osunut.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta