[PHP] Vind x aantal woorden voor en na zoekwoord

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 06-07 18:05
Ik wil graag een aantal woorden voor en na een zoekwoord vinden zodat ik deze zichtbaarder kan maken op de pagina. Stel dat jede volgende zin hebt:

Een team van verschillende faculteiten van de Technische Universiteit Eindhoven wil een gezinsauto gaan bouwen. Deze wordt aangedreven door zonne-energie. De auto moet in oktober 2013 deelnemen aan de World Solar Challenge.

Wanneer het zoekwoord "auto" is en ik als eindresultataat de 1 woord voor en na auto wil hebben dan zou het resultaat moeten zijn: "De auto moet". Wanneer ik 3 woorden voor en 4 woorden na het woord auto wil hebben dan zou ik willen stoppen met matchen wanneer er leestekens of html code gevonden wordt. Het resultaat zou dan moeten zijn: "De auto moet in oktober".

PHP:
1
2
3
4
5
6
$strResult = "Een team van verschillende faculteiten van de Technische Universiteit Eindhoven wil een gezinsauto gaan bouwen. Deze wordt aangedreven door zonne-energie. De auto moet in oktober [b]2013[/b] deelnemen aan de World Solar Challenge.";

$strPattern = "#(?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,5}\b(code)\b(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,3}#iu";
preg_match($strPattern, $strResult, $arrMatch);

var_dump($arrMatch);


Nu ben ik al een heel eind met mijn code, alleen lukt het me niet om deze te laten stoppen wanneer er HTML code of leestekens gevonden wordt. Iemand een idee hoe dit op te lossen is?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Waarom zou je dit met een regex op willen lossen in niet gewoon met strpos en dan vooruit/achteruit door de string lopen totdat je genoeg woorden hebt?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
^ Los daarvan; hou er rekening mee dat als je bijv. HTML gaat 'highlighten' dat dit soort zaken problemen gaan geven:

Zoekterm: Foo
HTML:
1
<p>Lorem ipsum dolor</p><p>Foo bar baz</p>

>>
HTML:
1
<p>Lorem ipsum <span class="highlight">dolor</p><p>Foo bar</span> baz</p>

[ Voor 7% gewijzigd door RobIII op 02-10-2012 18:04 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 06-07 18:05
Ik ben aan het voortborduren op bestaande code en daar gebruik ik de reguliere expressie vervolgens ook bij een preg_replace.

Maar mocht het met strpos ook kunnen kunnen dan wil ik dat ook zeker bekijken (maar loop je dan ook niet tegen het probleem aan dat deze niet stopt bij het tegenkomen van een leesteken of html code).

@RobIII klopt, ik heb voor andere code een "blacklist" aangelegt, zodat het script deze opties negeert. In dit geval zou het highlighten gewoon mogen stoppen bij iedere html optie die het tegenkomt.

[ Voor 23% gewijzigd door Erpenator2 op 02-10-2012 18:02 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-07 17:04

NMe

Quia Ego Sic Dico.

Nee, want die kun je context aware maken door te kijken naar wát je precies leest. Je kan daarbij bijvoorbeeld aangeven dat je wil stoppen met teruglezen/vooruit lezen op het moment dat je een punt, uitroepteken, vraagteken of een < of > tegenkomt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 06-07 18:05
Daar zou ik me dan in moeten verdiepen want ik gebruik deze optie eigenlijk bijna nooit.

Maar ik begrijp dat het met regex een stuk lastiger is?!

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-07 17:04

NMe

Quia Ego Sic Dico.

Sowieso minder leesbaar. Door iemand die bedreven is met regular expressions is er vast wel iets leuks te schrijven, maar uiteindelijk is dat nooit waterdicht om de reden die RobIII hierboven noemt. En zelfs in het beste geval is het eindresultaat waarschijnlijk redelijk lastig leesbaar en dus moeilijk te onderhouden.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Karakters als . < en > worden nu gematched door [^a-zA-Z'-]. Het lijkt me niet zo moeilijk om die karakters toe te voegen aan de lijst met ongewenste karakters? ;) Blijf je natuurlijk wel met het probleem zitten dat je de html niet geparsed hebt, dus je kan in een comment zitten, enz. (onoplosbaar zonder html-parser).

Ik vraag me enkel af waarom je het wiel opnieuw uit zou vinden, dit kan een kant en klaar pakket veel beter dan je het zelf kan schrijven. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 10-07 13:07
Some people, when confronted with a problem, think “I know, I'll use regular expressions.” Now they have two problems.
Sorry, moest ff.

[ Voor 5% gewijzigd door Hydra op 03-10-2012 10:05 ]

https://niels.nu


Acties:
  • 0 Henk 'm!

  • daaan
  • Registratie: Maart 2000
  • Laatst online: 12-06 12:21

daaan

Brandweer Zoutkamp

Leuk (en leerzaam) topic over HTML en RegEx op Stackoverflow: http://stackoverflow.com/...xhtml-self-contained-tags.

One's never alone with a rubber duck.

Pagina: 1