Hallo
Ik heb sinds kort een DVD burner en gebruik deze om back-ups te maken van bestanden. Ik heb meteen een PHP script geschreven waarmee ik door de backups kan zoeken en browsen. Werkt goed, de search functie doet alle bestandsnamen die aan de zoekcriteria voldoen bold maken (<B> en </B>). Maar nu wil ik dat niet de hele bestandsnaam bold word gemaakt, maar alleen de tekens in de bestandsnaam die aan de zoekcriteria voldoen. Voorbeeld: als ik als zoekcriteria FOO en DOC opgeef, moet hij <B>FOO</B>TBALL.<B>DOC</B> laten zien. Dit is het probleem niet, ik heb alle zoekcriteria in een array staan ($worldlist), en dan kan ik door dmv de volgende code alles replacen:
Je zou denken dat dit goed werkt. Maar er is een probleem: als ik zoek naar FOO en OOT, dan werkt het niet, omdat FOO en OOT allebei in $string voorkomen, maar elkaar overlappen. Als ik bovenstaande code uitvoer op met als zoekcriteria FOO en OOT, dan komt hij met: <B>FOO</B>TBALL.DOC, wat natuurlijk logisch is, omdat hij OOT niet meer kan vinden omdat er een </B> tag tussen staat. Maar wat ik wil is dat als hij ziet dat de twee strings elkaar overlappen, nog niet een </B> tag zet maar daarmee wacht todat er geen strings elkaar meer overlappen, dus in dit geval: <B>FOOT</B>BALL.DOC. Dit moet uiteraard ook werken met meerdere overlappende zoekcriteria bijv FOO OOT OTB BALL (in dit geval zou hij het hele woord FOOTBALL bold moeten maken door er <B> voor en </B> achter te zetten..).
Ik heb al vanalles geprobeerd maar ik kom er niet uit. Ik kon niets vinden over overlappende replacements in GoT search, groups.google, google,...
. Ik vermoed dat het mogelijk is om te maken wat ik wil met 1 preg_replace regeltje, omdat ik weet dat regular expressions zeer krachtig kunnen zijn. Maar ik weet niets van regular expressions af, ik heb wel gezocht naar tutorials hierover, en ook allemaal dingen hieruit overgenomen en uitgeprobeerd, maar mijn probleem is vrij specifiek en door alleen tutorials te lezen kan het nog dagen/weken duren voordat ik genoeg van regular expressions af weet om mijn probleem op te lossen.
Ik vraag niet voor een kant en klaar script (zou natuurlijk ook welkom zijn
), een duw in de goede richting zou volstaan.
Bedankt!
Ik heb sinds kort een DVD burner en gebruik deze om back-ups te maken van bestanden. Ik heb meteen een PHP script geschreven waarmee ik door de backups kan zoeken en browsen. Werkt goed, de search functie doet alle bestandsnamen die aan de zoekcriteria voldoen bold maken (<B> en </B>). Maar nu wil ik dat niet de hele bestandsnaam bold word gemaakt, maar alleen de tekens in de bestandsnaam die aan de zoekcriteria voldoen. Voorbeeld: als ik als zoekcriteria FOO en DOC opgeef, moet hij <B>FOO</B>TBALL.<B>DOC</B> laten zien. Dit is het probleem niet, ik heb alle zoekcriteria in een array staan ($worldlist), en dan kan ik door dmv de volgende code alles replacen:
PHP:
1
2
3
4
5
6
| $string = "FOOTBALL.DOC"; foreach ($wordlist as $word) { $string = str_replace($word, "<B>$word</B>", $string); } echo $string; |
Je zou denken dat dit goed werkt. Maar er is een probleem: als ik zoek naar FOO en OOT, dan werkt het niet, omdat FOO en OOT allebei in $string voorkomen, maar elkaar overlappen. Als ik bovenstaande code uitvoer op met als zoekcriteria FOO en OOT, dan komt hij met: <B>FOO</B>TBALL.DOC, wat natuurlijk logisch is, omdat hij OOT niet meer kan vinden omdat er een </B> tag tussen staat. Maar wat ik wil is dat als hij ziet dat de twee strings elkaar overlappen, nog niet een </B> tag zet maar daarmee wacht todat er geen strings elkaar meer overlappen, dus in dit geval: <B>FOOT</B>BALL.DOC. Dit moet uiteraard ook werken met meerdere overlappende zoekcriteria bijv FOO OOT OTB BALL (in dit geval zou hij het hele woord FOOTBALL bold moeten maken door er <B> voor en </B> achter te zetten..).
Ik heb al vanalles geprobeerd maar ik kom er niet uit. Ik kon niets vinden over overlappende replacements in GoT search, groups.google, google,...

Ik vraag niet voor een kant en klaar script (zou natuurlijk ook welkom zijn
Bedankt!