Hvordan sjekker jeg om en streng inneholder et bestemt ord?
Tenk over det:
$a = 'How are you?';
if ($a contains 'are')
echo 'true';
Anta at jeg har koden ovenfor, hva er den riktige måten å skrive setningen hvis ($a inneholder 'are')
?
2663
3
Du kan bruke funksjonen
strpos()
som brukes til å finne forekomsten av en streng inne i en annen:Merk at bruken av
!== false
er bevisst (verken!= false
eller=== true
vil returnere det ønskede resultatet);strpos()
returnerer enten forskyvningen der nålestrengen begynner i høystakken, eller den boolskefalse
hvis nålen ikke finnes. Siden 0 er en gyldig forskyvning og 0 er "falsk", kan vi ikke bruke enklere konstruksjoner som!strpos($a, 'are')
.Du kan bruke regulære uttrykk, det er bedre for ordmatching sammenlignet med
strpos
som nevnt av andre brukere, det vil også returnere sant for strenger som fare, omsorg, stirre osv. Dette kan enkelt unngås i regulære uttrykk ved å bruke ordgrenser.Et enkelt treff for are kan se omtrent slik ut:
På ytelsessiden er
strpos
omtrent tre ganger raskere, og husk at da jeg gjorde en million sammenligninger samtidig, tok detpreg_match
1,5 sekunder å fullføre, og forstrpos
tok det 0,5 sekunder.Rediger: For å søke på en hvilken som helst del av strengen, ikke bare ord for ord, vil jeg anbefale å bruke et regulært uttrykk som
i
på slutten av det regulære uttrykket endrer det regulære uttrykket til å være ufølsomt for store og små bokstaver, hvis du ikke vil ha det, kan du utelate det.Nå kan dette være ganske problematisk i noen tilfeller ettersom $search-strengen ikke er renset på noen måte, jeg mener, det kan ikke passere sjekken i noen tilfeller som om
$search
er en brukerinngang, de kan legge til en streng som kan oppføre seg som et annet regulært uttrykk ...Her er også et flott verktøy for å teste og se forklaringer på forskjellige regulære uttrykk Regex101.
For å kombinere begge settene med funksjonalitet i en enkelt flerbruksfunksjon (inkludert med valgbar følsomhet for store og små bokstaver), kan du bruke noe som dette:
Se på
strpos()
: