Halllo,

ik ben totaal niet technisch, maar heb 2 regular expressions nodig om een verwijzing te doen naar een specifiek type pagina van een website. Eenmalig eigenlijk. Ik hoop dat ik hier aan het goede adres ben en iemand kan helpen.

De structuur van de site is als volgt:

1. domein: ww.domein.nl
2. Categorie: ww.domein.nl/categorie.html waarbij er verschillende soorten categorieën zijn, heren, dames, kids om maar wat te noemen
3. Subcategorie: ww.domein.nl/categorie/subcategorie.html waarbij er weer verschillende soorten subcategorieën zijn. Truien, broeken etc

Ik zoek dus als eerste een regular expression waarmee ik alle pagina's "vang" bij 2 (op categorieniveau) EN alle pagina's bij 3 (subcategorieniveau). En dat indien mogelijk in 1 regular expression. Als dat onmogelijk is dan in 2.

En nog een niveau dieper is het als volgt:

4. Product dat direct onder de categorie hangt: ww.domein.nl/categorie/productnaam-roze.html
5. Product dat onder de subcategorie hangt: ww.domein.nl/categorie/subcategorie/productnaam-roze.html
Voor 4 en 5, dus alle productpagina's, zoek ik ook een regular expression. Maar dat kunnen dus honderden verschillende producten zijn met uiteenlopende namen zonder logica.

Ik hoop dat dit duidelijk is verwoord en dat iemand hierbij kan assisteren.

Mijn dank is groot!
Roy
Dit zou het moeten doen:
/^ww.domein.nl\/(.+?)(?:\/(.+?))?(?:\/(.+?))?\.html$/

Als er alleen een categorie is zit die in match[1], een evt. sub-categorie in match[2], een evt-evt productnaam in match[3]
<?php
$r = '/^ww.domein.nl\\/(.+?)(?:\\/(.+?))?(?:\\/(.+?))?\\.html$/';
preg_match($r,'ww.domein.nl/categorie.html',$match);
print_r($match);
/* Array
(
    [0] => ww.domein.nl/categorie.html
    [1] => categorie
) */
preg_match($r,'ww.domein.nl/categorie/subcategorie.html',$match);
print_r($match);
/* Array
(
    [0] => ww.domein.nl/categorie/subcategorie.html
    [1] => categorie
    [2] => subcategorie
) */
preg_match($r,'ww.domein.nl/categorie/subcategorie/productnaam-roze.html',$match);
print_r($match);
/* Array
(
    [0] => ww.domein.nl/categorie/subcategorie/productnaam-roze.html
    [1] => categorie
    [2] => subcategorie
    [3] => productnaam-roze
) */
?>

Ik neem overigens aan de het www (3x w) ipv ww moet zijn.
hoe herken je het verschil tussen (3) subcategorie.html en (4) productnaam-roze.html? Ziet er in de laatste altijd een "-" ?

Super, bedankt! Ja, idd 3x w. Ik snap het nog niet helemaal..

Ik wil hier http://prntscr.com/haolnt een code plaatsen en ik heb 2 codes nodig.

1. Eén code die matcht met categorie EN subcategorie (dat zijn de zogenaamde productoverzichtpagina's, daar mogen dus geen productpagina's inzitten). Voorbeeld: http://prntscr.com/haoolg en http://prntscr.com/haootm

2. Eén code die matcht met alleen productpagina's. Dus alleen maar pagina's waar je een product in je winkelwagen kan stoppen. Zoals http://prntscr.com/haophz

groet!



[size=xsmall]Toevoeging op 15/11/2017 10:09:20:[/size]

Ivo P op 15/11/2017 09:54:57

hoe herken je het verschil tussen (3) subcategorie.html en (4) productnaam-roze.html? Ziet er in de laatste altijd een "-" ?




Lastige, de "-" komt bijna altijd wel voor, maar is niet 100% zeker. En hij komt ook voor in de subcategorie. Zie voorbeeld: categoriepagina http://prntscr.com/haorbq en productpagina: http://prntscr.com/haorjf
ik snap je voorbeeldlinkjes niet: die eindigen niet op .html? en hebben maar 1 kreet?

Maar ik begrijp uit je tekst dat er geen verschil tussen 3 en 4 zit.
In die linkjes zit een prt screen en daar zie je de URL in en die eindigen wel op html. Zie je die? Het zijn deze links: http://www.steppinout.nl/heren/lounge-pants.html en
http://www.steppinout.nl/heren/lounge-pants/lounge-pants-00003220-20.html

Ik begrijp niet wat je bedoelt met "1 kreet"..

En wat betreft het verschil tussen 3 en 4: producten hangen zowel aan de categorie als aan de subcategorie. Ik kan een groene heren trui vinden onder www.domein.nl/heren/groene-trui.html maar ook onder www.domein.nl/heren/truien/groene-trui.html maar hij zou ook nog kunnen hangen onder www.domein.nl/heren/truien-en-vesten/groene-trui.html

:)
"1 kreet": "haorjf"

Als je linkjes in je post wilt gebruiken als toelichting, ,dan kun je die natuurlijk ook gewoon typen, ipv een screenshot op een andere server plaatsen en dan een link daarnaartoe plaatsen....

Houdt je verhaal wel zo leesbaar.

--
anyway: ik zie nog steeds geen verschil tussen 3 en 4.

Lijkt me handiger om in plaats daarvan de url op te splitsen op de /.

<?php $parts = explode('/',$_SERVER['REQUEST_URI']); ?>

Als er maar 1 element is (of als $part[0] op .html eindigt), dan is dat de categorie.

else:
als deel 2 op .html eindigt (danwel, count($parts)==2), dan is deel 1 ook de categorie, en deel 2 is de subcat, of een artikel.
Dan zul je in je database moeten zoeken of deel 2 voorkomt als subcategorie. Zo niet, dan is het een artikel.




Ivo P op 15/11/2017 10:37:41



Als je linkjes in je post wilt gebruiken als toelichting, ,dan kun je die natuurlijk ook gewoon typen, ipv een screenshot op een andere server plaatsen en dan een link daarnaartoe plaatsen....

Houdt je verhaal wel zo leesbaar.




Dank voor de tip! Ik had mijn reactie uitgebreid terwijl jij een reactie gaf. Dat maakte het al wat duidelijker denk/hoop ik

@Ivo: Het is altijd iets van categorie(/sub-categorie(/product-naam)).html (de stukken tussen (...) zijn steeds optioneel). Dat kun je dus prima herkennen: 1e stuk = categorie, 2e stuk = sub-cat, 3e stuk = product (als ze d'r zijn). Dat is ook precies wat mijn reg-ex doet (even alleen het optionele stukje - zit er 2x in):

(?:\\/(.+?))?

(          )? -> dit stuk is optioneel (ivm vraagteken d'r achter)
 ?:           -> dit stuk wil ik niet terugzien in de matches
   \\/        ->   ivm deze forward slash die ik niet wil zien
      (.+?)   -> dit is de match die ik zoek (? = non-greedy = zo kort mogelijk = 
                   niet de productnaam bij de sub-cat trekken)
In de vraag staat ook:

4. Product dat direct onder de categorie hangt: ww.domein.nl/categorie/productnaam-roze.html


en ik zie geen verschil tussen
ww.domein.nl/categorie/productnaam-roze.html
en
ww.domein.nl/categorie/roze-producten.html

De eerste zou één product zijn, en de tweede de subcategorie met roze producten.

Maar naar mijn idee is een regex hier overbodig: je weet dat je op de / moet splitten.
Uit het aantal gevonden delen weet je al of het gaat om 1 categorie, of in het geval van 3 delen om een cat/ sub-cat / product combinatie.

Alleen in het geval van 2 delen zul je een lijst met sub-categorieën moeten raadplegen om te zien of het een subcat is, of anders een product.

Waarbij eventuleel nog de combinatie "subcat" horend bij "cat" bekeken kan worden.

Reageren