PHP preg_match met RegEx om een ​​woord te matchen

Ik wil alle demowoorden vinden met behulp van PHP en regEx.

$input ='demo';
$pattern = ''; //$input can be used along with regex, please help here 
$text = 'This is dem*#o text, contains de12mo3 text, is .demo23* text' 

if(preg_match($pattern, $text))
{
 echo 'found';
}else{
 echo'not found';
}

het zoekwoord demo in de tekst kan in de volgende indeling aanwezig zijn

1) may start with special characters/numbers Eg. "12*demo"
2) may contain special characters/numbers within the word Eg.  "de12*mo"
3) may end with special characters/numbers Eg. "demo12*"

help alsjeblieft dat ik vast zit, bij voorbaat dank!

Note: The $input can be max. of 15 in length

1
toegevoegd de auteur Galen, de bron
@pcdhan Goed dat je iets hebt geprobeerd, zorg ervoor dat je het de volgende keer in de vraag plaatst.
toegevoegd de auteur John V., de bron
@PhpMyCoder Ik ben onbekend met RegEx, dit is wat ik probeer /[\ W $ demo \ W]/, maar het probleem is dat het geen speciale tekens kan detecteren die aanwezig zijn in het woord Eg. de123 * #
toegevoegd de auteur pcdhan, de bron
@AlexLunix, mijn fout, zal de volgende keer niet meer worden herhaald.
toegevoegd de auteur pcdhan, de bron

3 antwoord

De oplossing

Ik zou beginnen met het verwijderen van alle speciale tekens en cijfers uit de reeks en het woord vervolgens met woordgrenzen matchen:

$cleaned = preg_replace('/[^a-z ]+/i', '', 'This is dem*#o text, contains de12mo3 text, is .demo23* text');

preg_match_all('/\bdemo\b/i', $cleaned, $matches, PREG_OFFSET_CAPTURE);

var_dump($matches);

Geeft je ( Codepad Demo ):

array(1) {
  [0] => array(3) {
    [0] => array(2) {
      [0] => string(4) "demo"
      [1] => int(8)
    }

    [1] => array(2) {
      [0] => string(4) "demo"
      [1] => int(27)
    }

    [2] => array(2) {
      [0] => string(4) "demo"
      [1] => int(40)
    }
  }
}

Uitleg

De eerste regel vervangt tekens in uw tekenreeks (het onderwerpargument genoemd) die overeenkomen met <'>' [a-z] +/i met '', waarbij in feite de tekens worden verwijderd. De regex komt overeen met elk teken (of groep tekens) dat niet ( ^ ) de letters a-z of een spatie is. De vlag i vertelt regex dat de zoekopdracht hoofdletterongevoelig moet zijn (dit voorkomt dat we a-zA-Z schrijven).

De volgende regel gebruikt woordgrenzen om overeen te stemmen met het woord 'demo'. U kunt echter in elk woord vervangen.

Nieuwe Regex-technieken

3
toegevoegd
@pcdhan Laat het ons weten als je hulp nodig hebt bij de implementatie.
toegevoegd de auteur Bailey Parker, de bron
@pcdhan Altijd. Als dit uw vraag beantwoordt, moet u dit markeren als opgelost door op het vinkje ernaast te klikken.
toegevoegd de auteur Bailey Parker, de bron
bedankt, het heeft me veel geholpen, geprobeerd het te implementeren ..
toegevoegd de auteur pcdhan, de bron
succesvol geïmplementeerd, nogmaals erg bedankt, het heeft me echt geholpen.
toegevoegd de auteur pcdhan, de bron
/\b[^a-z]*d[^a-z]*e[^a-z]*m[^a-z]*o[^a-z]*\b/i

Komt overeen met alles behalve a-z tussen de demotekens

1
toegevoegd
Gebruik strlen() om de lengte achteraf te controleren
toegevoegd de auteur flec, de bron
bedankt @flec, de $ input kan maximaal zijn. van 15 tekens lang.
toegevoegd de auteur pcdhan, de bron

Waarschijnlijk niet efficiënt; Maar je zou dit kunnen gebruiken:

/(. *) D (. *) E (. *) M (. *) O (. *)/I

Dat zou alles evenaren.

0
toegevoegd