Gå til innhold

Hjelp med en Regex Kode


Anbefalte innlegg

Altså det jeg trenger er en kode som kan matche dette:

 

 

Site[X]:SiteID.SiteID.SiteID

 

Hvorav SiteID skal være så mange ganger som X tilsier, feks

 

Site[4]:1.4.6.8

 

Jeg har startet så vitt på Regex Coden:

 

site\[([0-9]*)]:

 

Men kommer ikke vidre grunnet manglende kompetanse, så derfor spør jeg om hjelp.

Lenke til kommentar
Videoannonse
Annonse

Gjorde et lite forsøk, kan sikkert gjøres lettere.

 

<?
function checkid($string)
{
//Denne regexen vil matche så lenge det er skrevet på riktig format og finne Site-nummeret
$regex = "/Site\[([0-9]*)\]:(\[[0-9]\].)*/";
//Denne regexen vil bare matche hvis det er like mange ID`er som Site-nummeret tilsier
$regex_2 = "/Site\[([0-9]*)\]:(\[[0-9]\].){{$matches[1]}}/";

//Henter ut Site-nummeret med $regex
preg_match($regex, $string, $matches);

//Denne sjekker stringen opp mot $regex_2
if(preg_match($regex_2, $string))
{
	//Returnerer true hvis kravene ovenfor oppfylles
	return true;
}
else
{
	//Returnerer false hvis kravene ovenfor ikke oppfylles
	return false;
}
}
//Dette eksempelet vil returnere 1
echo checkid("Site[3]:[6].[4].[5].");
?>

 

 

Edit: I følge mitt hode burde denne regexen holde:

Site\[([0-9])\]:(?:(?:\[[0-9]\])\.){\1}

 

dessverre nekter den å interprete de siste krølle-klammene som at den forrige parantesen så mange ganger som reference-1 sier. Den leter bare "{\1}" bokstavelig på slutten. Slik at dette ville ha validert: Site[2]:[2].{\1} !

 

Noen som kan forklare meg hvorfor det er sånn og hva jeg må gjøre for å få den slik jeg (og trådstarter vil?

Endret av Raring
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...