<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mikael Brevik &#187; Generelt</title>
	<atom:link href="http://mikaelb.net/emne/generelt/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikaelb.net</link>
	<description>Bloggen</description>
	<lastBuildDate>Mon, 07 Sep 2009 20:11:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Liten innføring i foreninger (JOIN) i SQL</title>
		<link>http://mikaelb.net/2009/09/liten-innf%c3%b8ring-i-foreninger-join-i-sql/</link>
		<comments>http://mikaelb.net/2009/09/liten-innf%c3%b8ring-i-foreninger-join-i-sql/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 20:09:39 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Generelt]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://mikaelb.net/?p=161</guid>
		<description><![CDATA[Denne artikkelen baserer seg mest på SQL-standarden (Oracle), men kommer også til å komme med innstikk dersom forskjellige metoder ikke fungerer i MySQL, da jeg går ut i fra at denne dialekten er den mest brukte her på forumet, men tror ikke det skal bli noe problem.
Noen ord om forening (JOIN)
En forening, eller JOIN som [...]]]></description>
			<content:encoded><![CDATA[<p>Denne artikkelen baserer seg mest på SQL-standarden (Oracle), men kommer også til å komme med innstikk dersom forskjellige metoder ikke fungerer i MySQL, da jeg går ut i fra at denne dialekten er den mest brukte her på forumet, men tror ikke det skal bli noe problem.</p>
<h2><strong>Noen ord om forening (JOIN)</strong></h2>
<p>En forening, eller JOIN som det heter på engelsk, er en rasjonell operator på lik linje som utvelgelse av kolonner eller rader som skal vises. Det er en operasjon på relasjons-databaser som brukes til å koble sammen to eller flere tabeller i en database &#8211; igjennom en felles kolonne. Dersom man bruker MySQL og InnoDB vil det som regel være primærnøkkelen og fremmednøkkelen som blir brukt som bindeledd.</p>
<p>Et lite eksempel på hva man kan oppnå med forening.</p>
<p>Jeg har to tabeller. Den ene inneholder personer i et register, den andre inneholder postnummer og poststed. Det jeg vil oppnå er å liste ut alle personer med tilhørende poststed. Tabellene ser slik ut (bruker relasjonell form).</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;">person <span style="color: #66cc66;">&#40;</span>person_id<span style="color: #66cc66;">,</span> name<span style="color: #66cc66;">,</span> zip_code<span style="color: #66cc66;">*</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
postal <span style="color: #66cc66;">&#40;</span>zip_code<span style="color: #66cc66;">,</span> post_place<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>De som er understreket er primærnøkler og * markerer en fremmednøkkel. Dette er hva vi kaller en en-til-mange relasjon. For å hente ut ønsket info kan jeg bruke denne spørringen.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> t1<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">,</span> t2<span style="color: #66cc66;">.</span>post_place <span style="color: #993333; font-weight: bold;">FROM</span> person t1 <span style="color: #993333; font-weight: bold;">INNER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> postal t2 <span style="color: #993333; font-weight: bold;">ON</span> t1<span style="color: #66cc66;">.</span>zip_code <span style="color: #66cc66;">=</span> t2<span style="color: #66cc66;">.</span>zip_code;</pre></div></div>

<p>Nå som vi har fått unna et kjapt eksempel kan vi gå over til hvilke forskjellige foreningsmetoder vi har og når vi vil bruke de.</p>
<h2><strong>De jeg kommer til å gjennomgå er </strong></h2>
<ol>
<li>INNER JOIN og NATURAL JOIN</li>
<li>LEFT OUTER JOIN</li>
<li>RIGHT OUTER JOIN</li>
<li>FULL OUTER JOIN</li>
<li>CROSS JOIN (noen kjappe ord)</li>
</ol>
<h2>INNER JOIN</h2>
<p><img class="aligncenter size-full wp-image-160" title="inner_join" src="http://mikaelb.net/wp-content/uploads/2009/09/inner_join.png" alt="inner_join" width="500" height="265" /></p>
<p>INNER JOIN, med LEFT/RIGHT JOIN, er nok den foreningen som kommer til å bli brukt mest. Det er noe som kalles equijoin, og betyr rett og slett at man henter ut informasjonen bundet sammen av to felles verdier i en kolonne/attributt. Kodene ovenfor er et eksempel på denne typen forening.</p>
<p>Det som gjør INNER JOIN forskjellig fra noen OUTER JOIN (som LEFT/RIGHT) er at vi henter kun ut de radene (også kalt «tupler») som har verdier i begge de kolonnene som vi forener om. Om vi viderefører eksemplet ovenfor vil dette si at kun personer med poststed og kun poststedene med personer i seg blir hentet ut. Vi får ikke listet ut alle poststedene som ikke er bebodd av noen medlemmer i person-tabellen vår, og vi får heller ikke listet ut personer som ikke har noe poststed registrert.</p>
<p>Eksempel på INNER JOIN finner har jeg allerede skrevet i toppen av artikkelen.</p>
<h3><strong>NATURAL JOIN</strong></h3>
<p>NATURAL JOIN er i all basis det samme som en INNER JOIN. Eneste forskjellen er at vi fjerner duplikatkolonner. Vi ser at både postal- og person-tabellene inneholder zip_code kolonnen. Dersom vi henter ut alle felt med en vanlig INNER JOIN vil begge disse hentes ut. Det er naturlig at vi ikke trenger denne informasjonen to ganger. Det er sløsing med dataplass/minnebruk. Dersom vi bruker projeksjon (en relasjonell operator som tillater oss å velge hvilke kolonner vi vil ha ut &#8211; f.eks SELECT <strong>field1, field2 [...]</strong>), er det ikke nødvendig med NATURAL JOIN.</p>
<h4><strong>Eksempel på NATURAL JOIN</strong></h4>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> person t1 <span style="color: #993333; font-weight: bold;">NATURAL</span> <span style="color: #993333; font-weight: bold;">JOIN</span> postal t2 <span style="color: #993333; font-weight: bold;">ON</span> t1<span style="color: #66cc66;">.</span>zip_code <span style="color: #66cc66;">=</span> t2<span style="color: #66cc66;">.</span>zip_code;</pre></div></div>

<p><strong></strong></p>
<h2>LEFT OUTER JOIN</h2>
<p><img class="aligncenter size-full wp-image-158" title="left_outer_join" src="http://mikaelb.net/wp-content/uploads/2009/09/left_outer_join.png" alt="left_outer_join" width="500" height="265" /></p>
<p>Nå har vi beveget oss ut på ytterforening. I motsetning til INNER JOIN vil en LEFT OUTER JOIN favorisere en side av tabellene. Det er fortsatt en såkalt «equijoin». Relatert til det eksemplet vi har brukt tidligere vil det bety at vi kan hente ut alle postkodene uavhengig av om de har personer registrert til seg eller ikke &#8211; eller motsatt; alle personer uavhengig om de har registrert postkode.</p>
<p>Her er OUTER et valgfritt nøkkelord i spørringen. LEFT JOIN er såvidt jeg vet det samme som LEFT OUTER JOIN.</p>
<h3><strong>Eksempel på LEFT [OUTER] JOIN</strong></h3>
<p>Jeg vil hente ut alle personer og dersom de har registrert poststed vil jeg også vise disse.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> t1<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">,</span> t2<span style="color: #66cc66;">.</span>post_place <span style="color: #993333; font-weight: bold;">FROM</span> person t1 <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">JOIN</span> postal t2 <span style="color: #993333; font-weight: bold;">ON</span> t1<span style="color: #66cc66;">.</span>zip_code <span style="color: #66cc66;">=</span> t2<span style="color: #66cc66;">.</span>zip_code;</pre></div></div>

<p>Du ser her at tabellen person er den tabellen som står etter FROM-nøkkelordet. Dette gjør den til en venstrestilt tabell, og det er den vi favoriserer ved å bruke LEFT JOIN.</p>
<h2><strong>RIGHT OUTER JOIN</strong></h2>
<p><strong><img class="aligncenter size-full wp-image-157" title="right_outer_join" src="http://mikaelb.net/wp-content/uploads/2009/09/right_outer_join.png" alt="right_outer_join" width="500" height="265" /><br />
</strong></p>
<p>RIGHT OUTER JOIN er i praksis veldig lik LEFT OUTER JOIN. Eneste forskjellen på disse er hvilken side vi vil favorisere. Vi ser av forrige punkt om LEFT JOIN er det person som blir favorisert. Dersom jeg bruker RIGHT JOIN er det postal-tabellen som blir hovedtabellen. Resultatet vil være en tabell over alle postkoder og tilhørende personer som er registrert. Siden vi ikke grupperer vil vi få flere resultater av samme postkode, da «tuplene» er av forskjellige kombinasjoner (forskjellige personer til samme postkode).</p>
<h3><strong>Eksempel på RIGHT [OUTER] JOIN</strong></h3>
<p>Jeg vil hente ut alle postkoder og dersom de har registrert personer vil jeg også vise alle disse.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> t1<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">,</span> t2<span style="color: #66cc66;">.</span>post_place <span style="color: #993333; font-weight: bold;">FROM</span> person t1 <span style="color: #993333; font-weight: bold;">RIGHT</span> <span style="color: #993333; font-weight: bold;">JOIN</span> postal t2 <span style="color: #993333; font-weight: bold;">ON</span> t1<span style="color: #66cc66;">.</span>zip_code <span style="color: #66cc66;">=</span> t2<span style="color: #66cc66;">.</span>zip_code;</pre></div></div>

<h2><strong>FULL OUTER JOIN</strong></h2>
<p><strong><img class="aligncenter size-full wp-image-159" title="full_outer_join" src="http://mikaelb.net/wp-content/uploads/2009/09/full_outer_join.png" alt="full_outer_join" width="500" height="265" /><br />
</strong></p>
<p>Siden dette også er en OUTER JOIN kan vi kanskje se for oss hva vi kommer til å få. Dette er en ytterforening som ikke favoriserer noen side. Den kommer til å vise poststeder med og uten personer og personer med og uten poststed.</p>
<h3><strong>Eksempel på FULL OUTER JOIN</strong></h3>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> t1<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">,</span> t2<span style="color: #66cc66;">.</span>post_place <span style="color: #993333; font-weight: bold;">FROM</span> person t1 <span style="color: #993333; font-weight: bold;">FULL</span> <span style="color: #993333; font-weight: bold;">OUTER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> postal t2 <span style="color: #993333; font-weight: bold;">ON</span> t1<span style="color: #66cc66;">.</span>zip_code <span style="color: #66cc66;">=</span> t2<span style="color: #66cc66;">.</span>zip_code;</pre></div></div>

<h2><strong>CROSS JOIN</strong></h2>
<p>Denne foreningen er litt anderledes enn de vi har sett på til nå. På norsk kalles dette gjerne kryssprodukt eller kartesisk produkt. Her har vi en forening uten noe nøkkelord som JOIN. Vi bruker rett og slett flere tabeller adskilt av komma etter FROM. Uten noe seleksjon (i praksis WHERE-nøkkelordet) vil dette gi alle mulige kombinasjoner av de to tabellene sammenlagt.</p>
<h3><strong>Eksempel på CROSS JOIN</strong></h3>
<p>Jeg har en tabell med navn tabell1 som har kun én kolonne; tall. Denne tabellen inneholder følgende data: 1, 2, 3. Jeg har også en tabell til med navn tabell2 som inneholder akkurat samme data.</p>
<p>Dersom jeg da kjører følgende spørring:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> tabell1<span style="color: #66cc66;">,</span> tabell2;</pre></div></div>

<p>Vil resultatet være følgende:</p>
<blockquote><p>[ tall | tall ]</p>
<p>[ 1 | 1 ]</p>
<p>[ 1 | 2 ]</p>
<p>[ 1 | 3 ]</p>
<p>[ 2 | 1 ]</p>
<p>[ 2 | 2 ]</p>
<p>[ 2 | 3 ]</p>
<p>[ 3 | 1 ]</p>
<p>[ 3 | 2 ]</p>
<p>[ 3 | 3 ]</p></blockquote>
<h2><strong>Referanser</strong></h2>
<p>Jeg er særdeles dårlig på norske uttrykk når det gjelder programmering og lignende. Derfor har jeg fått hjelp av boka [i]Databaser[/i] som er skrevet av Kjell Toft Hansen og Tore Mallaug.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2009/09/liten-innf%c3%b8ring-i-foreninger-join-i-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MacHeist 3: Nytt mission</title>
		<link>http://mikaelb.net/2009/02/macheist-3-nytt-mission/</link>
		<comments>http://mikaelb.net/2009/02/macheist-3-nytt-mission/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 02:10:22 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Generelt]]></category>

		<guid isPermaLink="false">http://mikaelb.net/?p=111</guid>
		<description><![CDATA[Det er en stund siden første mission av MacHeist 3 startet, men nå, i skrivende stund, er det et nytt mission som starter. Det har allerede vært to nanomissions og et fult mission og MacHeist har til nå gitt ut 10 programmer som du kan få gratis, med lisens. 
Dersom du er interessert i gratis [...]]]></description>
			<content:encoded><![CDATA[<p>Det er en stund siden første mission av <a href="http://www.macheist.com/">MacHeist 3</a> startet, men nå, i skrivende stund, er det et nytt mission som starter. Det har allerede vært to nanomissions og et fult mission og <a href="http://www.macheist.com/">MacHeist</a> har til nå gitt ut 10 programmer som du kan få gratis, med lisens. </p>
<p>Dersom du er interessert i gratis program og en oppfriskende utfordring ta turen innom <a href="http://www.macheist.com/">MacHeist</a> sine hjemmesider. </p>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2009/02/macheist-3-nytt-mission/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flow Charts &#8211; XKCD</title>
		<link>http://mikaelb.net/2008/12/flow-charts-xkcd/</link>
		<comments>http://mikaelb.net/2008/12/flow-charts-xkcd/#comments</comments>
		<pubDate>Thu, 25 Dec 2008 16:31:14 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Generelt]]></category>

		<guid isPermaLink="false">http://mikaelb.net/?p=81</guid>
		<description><![CDATA[Det er alt for lite livlige bilder her i bloggen. Derfor sender jeg med dette bildet som lærer dere flow charts!
]]></description>
			<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 750px"><span style="text-decoration: underline;"><a href="http://xkcd.com/518/"><img title="At 8 drinks, you switch the torrent from FreeBSD to Microsoft Bob.  Cmon, itll be fun!" src="http://imgs.xkcd.com/comics/flow_charts.png" alt="At 8 drinks, you switch the torrent from FreeBSD to Microsoft Bob.  Cmon, itll be fun!" width="740" height="534" /></a></span><p class="wp-caption-text">At 8 drinks, you switch the torrent from FreeBSD to Microsoft Bob.  C&#39;mon, it&#39;ll be fun!</p></div>
<p>Det er alt for lite livlige bilder her i bloggen. Derfor sender jeg med dette bildet som lærer dere flow charts!</p>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2008/12/flow-charts-xkcd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>En mer informativ error 404 side</title>
		<link>http://mikaelb.net/2008/12/en-mer-informativ-error-404-side/</link>
		<comments>http://mikaelb.net/2008/12/en-mer-informativ-error-404-side/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 23:18:23 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Generelt]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[error 404 håndtering]]></category>
		<category><![CDATA[feilmelding]]></category>
		<category><![CDATA[HTTP_REFERER]]></category>
		<category><![CDATA[logg]]></category>
		<category><![CDATA[referer]]></category>

		<guid isPermaLink="false">http://mikaelb.net/?p=78</guid>
		<description><![CDATA[Dette skriveriet er løst basert på en ALA artikkel jeg leste her om dagen. Den omhandler hvordan du kan lage en feilmeldingsside som er mer informativ både til deg og brukeren som opplever den. ALA forfatteren har valgt å dele inn forskjellige error 404-meldinger i 4 grupper. Jeg derimot velger å sette disse til 3 [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_85" class="wp-caption alignright" style="width: 238px"><img class="size-full wp-image-85" title="lenkebrudd" src="http://mikaelb.net/wp-content/uploads/2008/12/lenkebrudd.jpg" alt="Lenkebrudd" width="228" height="75" /><p class="wp-caption-text">Lenkebrudd</p></div>
<p>Dette skriveriet er løst basert på en <a title="A List Apart: A More Useful 404" href="http://alistapart.com/articles/amoreuseful404">ALA artikkel</a> jeg leste her om dagen. Den omhandler hvordan du kan lage en feilmeldingsside som er mer informativ både til deg og brukeren som opplever den. ALA forfatteren har valgt å dele inn forskjellige error 404-meldinger i 4 grupper. Jeg derimot velger å sette disse til 3 for enkelhetens skyld.</p>
<ul>
<li>Feil fra brukerens side. Gammelt bokmerke, feilskreven URL.</li>
<li>Et brudd på en lenke på din side.</li>
<li>Et brudd på en lenke fra en annen side. Enten en søkeside eller en annen side.</li>
</ul>
<ol></ol>
<p>Hovedsakelig ønsker vi som utvikler og eier av siden informasjon dersom det er brudd på en lenke i din side, men også muligens fra andres sider. Dersom det er noen som lenker til siden din (kanskje en annen blogg) så kan du sende en e-post til de og informere om lenkebruddet. Gammelt bokmerke eller feil skrevet URL trenger vi ikke så mye informasjon om.</p>
<p>For å finne hvor brukeren kom fra kan vi bruke superglobale tabellen _SERVER og hente ut verdien av HTTP_REFERER. Det er viktig å huske at HTTP_REFERER ikke er 100% nøyaktig. Den fungerer bare dersom det blir linket igjennom en a-tag, eller igjennom form-submitt og bilde-kilde. Det fungerer altså ikke dersom det er linket igjennom en e-post, med en redirect, lasting igjennom XML, bokmerke og lignende. Det er også ganske lett å endre innholdet i HTTP_REFERER, så dersom den skal skrives ut må vi ta høyde for XSS. Siden dette ikke er en veldig essensiell funksjon vi skal lage, holder HTTP_REFERER lenge som en pekepinn på hvor brukeren kom i fra. Det er også ingen reell trussel for XSS siden vi ikke trenger å skrive ut verdien eller bruke den i en database eller lignende. HTTP_REFERER kan også ikke eksistere i enkelte tilfeller, derfor er det lurt å ta en isset()-test når man setter verdien.</p>
<p>Vi setter verdien av HTTP_REFERER slik:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$referer</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_REFERER'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$referer</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_REFERER'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>1. Gammelt bokmerke eller feilskreven URL</h3>
<p>Dersom $referer er null går vi ut i fra at det går under kategori 1. Vi har ingen stor nytteverdi av å vite dette i noen slags logg eller på e-post, derfor skriver vi bare ut til brukeren at de burde oppdatere bokmerkene sine, eller se etter korrekt side ved å bruke søketjenesten vi har på siden.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&lt;h2&gt;Feilmelding: 404 Fil ikke funnet!&lt;/h2&gt;
<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&nbsp;
Filen du letet etter finnes ikke her. 
&nbsp;
&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$referer</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Det ser ut til at du bruker et gammelt
	bokmerke eller har skrevet inn feil URl.
&nbsp;
Prøv søkefeltet på siden eller skriv inn
korrekt URL i adressefeltet i nettleseren din.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Vi skriver bare ut en enkel feilmelding til brukeren, og logger ikke eller noe i den dur.</p>
<h3>2. Et brudd på en lenke på din side</h3>
<p>Dersom det er et brudd i en lenke på vår side vil vi gjerne vite om det for å kunne korrigere feilen. Derfor kan vi velge å i tillegg til å skrive ut feilmelding så logger vi hendelsen og sender en e-post til administrator om hva som har skjedd.</p>
<p>Dersom vårt domenenavn er i $referer går vi ut i fra at det er en brudd i en lenke på siden vår. Det er ikke krise dersom noen har tuklet med HTTP_REFERER og lagt inn domenenavnet vårt. Det fører bare til en e-post som vi kan sjekke kjapt selv. Jeg tar en enkel test her for å vise konseptet.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">stristr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$referer</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SERVER_NAME'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	sendMailError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_LOCAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	logError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_LOCAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Det ser ut til at vi har et lenkebrudd på siden
	vår. Vi vil med dette se nærmere på saken og håper
	å få fikset det i løpet av kort tid.
&nbsp;
        Prøv søkefeltet på denne siden for å finne
	en annen link til denne siden.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Her bruker jeg to pseudo-funksjoner til å vise til hvordan en kan gjøre det. sendMailError404 sender rett og slett e-post til administrator som informerer om at det er et lenkebrudd på siden som $referer viser til. Loggen lagrer bare samme informasjon i en txt-fil på root-området eller lignende.</p>
<h3>3. Et brudd på en lenke fra en annen side</h3>
<p>Ved øvrig hendelser, hvor referer er satt men ikke inneholder domenenavnet ditt kan man gå ut i fra at det er en annen side som har en brutt lenke til siden din. Her er det kanskje ikke nødvendig å sende inn en e-post hver gang dette skjer. Ofte kan det være slik at søkesider har gamle sider indeksert og da kan det være litt plagsomt å få flere e-poster hver dag med informasjon om lenkebrudd fra f.eks Google. I dette tilfellet ville jeg bare ha logget hendelsen og med jevne mellomrom sjekket loggen etter noen lenkebrudd fra f.eks bloggrollen min eller andre sider.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
	logError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_EXTERNAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Det ser ut til at vi har et lenkebrudd på en
	ekstern side. Vi vil med dette se nærmere på saken og håper
	å få fikset det i løpet av kort tid.
&nbsp;
        Prøv søkefeltet på denne siden for å finne
	en annen link til denne siden.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Vi kan sette en komplett semi-kode på dette for å vise til hvordan det kan gjøres.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$referer</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_REFERER'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$referer</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_REFERER'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&lt;h2&gt;Feilmelding: 404 Fil ikke funnet!&lt;/h2&gt;
<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&nbsp;
Filen du letet etter finnes ikke her.
&nbsp;
&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$referer</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&nbsp;
Det ser ut til at du bruker et gammelt
	bokmerke eller har skrevet inn feil URl.
&nbsp;
Prøv søkefeltet på siden eller skriv inn
	korrekt URL i adressefeltet i nettleseren din.
&nbsp;
<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">stristr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$referer</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SERVER_NAME'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	sendMailError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_LOCAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	logError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_LOCAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&nbsp;
Det ser ut til at vi har et lenkebrudd på siden
	vår. Vi vil med dette se nærmere på saken og håper
	å få fikset det i løpet av kort tid.
&nbsp;
Prøv søkefeltet på denne siden for å finne
	en annen link til denne siden.
&nbsp;
<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
	logError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_EXTERNAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&nbsp;
Det ser ut til at vi har et lenkebrudd på en
	ekstern side. Vi vil med dette se nærmere på saken og håper
	å få fikset det i løpet av kort tid.
&nbsp;
Prøv søkefeltet på denne siden for å finne
	en annen link til denne siden.
&nbsp;
<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Sette en PHP-fil som feilmeldingsdokument</h3>
<p>Når man har laget et PHP-dokument som inneholder koden over må man sette filen man lagrer det som til en Error 404 dokument. Dette gjør man i htaccess filen på følgende måte:</p>

<div class="wp_syntax"><div class="code"><pre class="htaccess" style="font-family:monospace;">ErrorDocument 404 /php/404.php</pre></div></div>

<p>Nå har vi en error 404 side som er mye mer informativ for både deg og brukeren. På denne måten kan vi også holde oversikt og få hjelp til å finne lenker som er brutt på andres sider som lenker til din side, eller lenker som er brutt på din egen side.</p>
<p>Som alltid setter jeg pris på tilbakemeldinger.</p>
<p>Ha en flott jul og et godt nytt år.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2008/12/en-mer-informativ-error-404-side/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anbefalt lesing: What are web standards and why should I use them?</title>
		<link>http://mikaelb.net/2008/12/anbefalt-lesing-what-are-web-standards-and-why-should-i-use-them/</link>
		<comments>http://mikaelb.net/2008/12/anbefalt-lesing-what-are-web-standards-and-why-should-i-use-them/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 17:24:07 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Generelt]]></category>
		<category><![CDATA[anbefalt lesing]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[webstandard]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://mikaelb.net/blogg/?p=27</guid>
		<description><![CDATA[Det har vært lite aktivitet fra meg de siste ukene. Jeg har vært utslitt og har hatt vondt i alle muskler. Russetiden går hardt utover helsen. Men nå er den tiden forbi, og er kun et minne til fremtiden. Nå har jeg bedre tid igjen, til å skrive mer på denne siden, og prøve å [...]]]></description>
			<content:encoded><![CDATA[<p>Det har vært lite aktivitet fra meg de siste ukene. Jeg har vært utslitt og har hatt vondt i alle muskler. Russetiden går hardt utover helsen. Men nå er den tiden forbi, og er kun et minne til fremtiden. Nå har jeg bedre tid igjen, til å skrive mer på denne siden, og prøve å gjeneurobre lesere, som sikkert har synket så drastisk at jeg ikke en gang tør å tenke på det. Men det er vel slik som skjer, når russetiden kommer. Prioriteringslisten endrer seg.</p>
<p>Som første post, etter pausen min, vil jeg anbefale noe lesestoff for de som er i tvil om hva webstandarder er, og hvorfor det er så sabla viktig. Denne lenken fører deg videre til <a title="Webstandards.org" rel="external-link" hreflang="en" href="http://webstandards.org/">Webstandards.org</a>, som ofte kommer med gode poster til de som engasjerer seg for semantikk og webstandarder. Noen poster kan man kanskje styre unna, da de blir litt for tekniske for de fleste.</p>
<p>Men dette er altså en artikkel jeg anbefaler alle som driver med nettutvikling å lese: <a title="What are web standards and why should I use them?" hreflang="en" href="http://webstandards.org/learn/faq/">What are web standards and why should I use them?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2008/12/anbefalt-lesing-what-are-web-standards-and-why-should-i-use-them/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hvordan lage regulære uttrykk</title>
		<link>http://mikaelb.net/2008/12/hvordan-lage-regulaere-uttrykk/</link>
		<comments>http://mikaelb.net/2008/12/hvordan-lage-regulaere-uttrykk/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 17:01:57 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Generelt]]></category>
		<category><![CDATA[regexp]]></category>
		<category><![CDATA[regular expression]]></category>
		<category><![CDATA[regulære uttrykk]]></category>

		<guid isPermaLink="false">http://mikaelb.net/blogg/?p=17</guid>
		<description><![CDATA[Syntaksen i regulære uttrykk kan deles opp i flere grupper. I alt har vi 5 forskjellige. Disse kan vi si er

Tegnsetting
Ankrer
Klassekoder
Klasser
Modifiers

Disse gruppene dekker ikke alle felt, men de fleste. F.eks dekker de ikke hexadecimal som koden er \xTALL på.
Tegnsetting
Tegnsettingen er veldig essensielt i RegExp. De kan bestemme alt som skal foregå i et uttrykk.

\ » [...]]]></description>
			<content:encoded><![CDATA[<p>Syntaksen i regulære uttrykk kan deles opp i flere grupper. I alt har vi 5 forskjellige. Disse kan vi si er</p>
<ul>
<li>Tegnsetting</li>
<li>Ankrer</li>
<li>Klassekoder</li>
<li>Klasser</li>
<li>Modifiers</li>
</ul>
<p>Disse gruppene dekker ikke alle felt, men de fleste. F.eks dekker de ikke hexadecimal som koden er <code>\xTALL</code> på.</p>
<h3>Tegnsetting</h3>
<p>Tegnsettingen er veldig essensielt i RegExp. De kan bestemme alt som skal foregå i et uttrykk.</p>
<ul>
<li><code>\</code> » Den escaper andre tegn og klasser. Brukes forrann et annet tegn og du matcher tegnet. Bruker du den forrann klasser så blir det en annen sak, som vi kommer tilbake til. <span>Eksempel: <code>/(http:\/\/)/</code></span></li>
<li><code>|</code> » Kan oversettes til <em>eller</em>. <span>Eksempel: <code>/(http|ftp):\/\//</code></span></li>
<li><code>{ og }</code> » Setter lengden den skal godta. <span>Eksempel: <code>/([\w]{10,20})/</code></span></li>
<li><code>( og )</code> » Grupperer valgene og velger det en kan bruke senere. F.eks det som er mellom paranteser kan bli kalt med \\1 i en preg_replace. <span>Eksempel: <code>/([\w]{10,20})/</code></span></li>
<li><code>[ og ]</code> » Setter klasser av tegn og rekkevidder. <span>Eksempel: <code>/[a-z]/</code></span></li>
<li><code>.</code> » Alle tegn foruten <code>\n</code> <span>Eksempel: <code>/./</code></span></li>
<li><code>*</code> » Matcher tegn fra 0 eller mer. Samme som {0,}  <span>Eksempel: <code>/(.*)/</code></span></li>
<li><code>+</code> » Matcher tegn fra 1 eller mer. Samme som {1,}  <span>Eksempel: <code>/(.+)/</code></span></li>
<li><code>?</code> » Matcher tegn fra 1 eller ingen. Samme som {0,1}  <span>Eksempel: <code>/(.?)/</code></span></li>
<li><code>^</code> » Definerer starten på en streng.<span>Eksempel: <code>/^[a-z]{3,6}/</code> &#8211; Inneholder a-z på de 3-6 første tegnene av en streng</span></li>
<li><code>$</code> » Definerer slutten på en streng. <span>Eksempel: <code>/[a-z]{3,6}$/</code> &#8211; Inneholder a-z på de 3-6 siste tegnene av en streng</span></li>
</ul>
<h3>Ankrer</h3>
<p>Ankerkoder vil definere hvor i strengen du mener. ^ og $ er to ankerkoder. Men det finnes flere.</p>
<ul>
<li><code>\b</code> » Setter en grense i et ord. Kutter ordet etter match.<span>Eksempel: <code>/MinStreng\b/</code></span></li>
<li><code>\B</code> » Tar alt utenom grensen<span>Eksempel: <code>/Rat\B/</code> &#8211; Tar Rattata, men ikke kun Rat.</span></li>
<li><code>\A</code> » Definerer starten på en streng.</li>
<li><code>\Z</code> » Definerer starten på en streng.</li>
</ul>
<h3>Klassekoder og klasser</h3>
<p>Her er det som definerer rangen mellom strenger. Hvilke tegn den skal matche o.l. Det er flere måter å gjøre det på, bruke enkeltbokstaver med escape, f.eks \w og \d. Eller bruke range &#8220;manuelt&#8221;, f.eks [a-z] og [0-9].</p>
<ul>
<li><code>\d</code> == <code>[0-9]</code> » Matcher alle tall</li>
<li><code>\D</code> == <code>[^0-9]</code> » Matcher alle ikke tall</li>
<li><code>\w</code> == <code>[a-zA-Z_0-9]</code> » Matcher alle bokstaver fra a til z, store og små. Samt tall og understrek.</li>
<li><code>\W</code> == <code>[^a-zA-Z_0-9]</code> » Matcher alt som ikke er a-z (små og stort), tall og understrek</li>
<li><code>\s</code> == <code>[ \t\n\r\f]</code> » Matcher whitespace, tabulater, newline osv.</li>
<li><code>\S</code> == <code>[^ \t\n\r\f]</code> » Matcher alt som ikke er whitespace, tabulater, newline osv.</li>
</ul>
<h3>Modifiers</h3>
<p>Jeg mangler et norsk ord på dette. Alle har hørt om det, men er ikke sikkert de er klar over alle eller vet hva de gjør. De fleste vet hva i-modifieren gjør, men har du hørt om o? Eller g? Eller kanskje e? Vel, her er en liste over modifiers.</p>
<ul>
<li><code>i</code> » Gjør mønsteret case-insensitive</li>
<li><code>e</code> » Bruk som callback i preg_replace i PHP.</li>
<li><code>x</code> » Bruk utvidet regulært uttrykk</li>
<li><code>o</code> » Kjør uttrykket kun èn gang.</li>
<li><code>g</code> » Kjør uttrykket globalt. Over flere ganger. Som preg_match_all()</li>
<li><code>m</code> » Behandle uttrykket som flere linjer</li>
<li><code>s</code> » Behandle uttrykket som kun èn linjer</li>
</ul>
<h3>Hvordan sette det sammen?</h3>
<p>Så nå har vi all informasjonen vi trenger til å sette sammen et uttrykk. Slik som dette:</p>
<h4>Eksempel</h4>
<p>Vi skal stoppe spam, og har sett at et fellestrekk med spam-postene er at postene ofte har &#8220;Hey&#8221;, &#8220;Hello&#8221; eller &#8220;Hi&#8221; i starten, og fulgt av to linker på neste linje. Den inneholder også tekst etter &#8220;Hey&#8221;, &#8220;Hello&#8221; eller &#8220;Hi&#8221;. Denne er observert som vanlig tekst mellom 14 og 25 tegn.</p>
<p>Eksempel på kommentar ser slik ut:</p>
<blockquote><p>
Hello! Great site, pal!<br />
&lt;a href=&#8221;http://mikaelb.net/#&#8221;&gt;SpamLink&lt;/a&gt; | &lt;a href=&#8221;http://mikaelb.net/#&#8221;&gt;SpamLink&lt;/a&gt;
</p></blockquote>
<p>Vi skal lage et uttrykk som passer dette, hvordan?</p>
<p>Tenk et ledd om gangen. Først starter vi med at alle starter med &#8220;H&#8221;. Da gjør vi slik:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">/</span>^H<span style="color: #339933;">/</span>i</pre></td></tr></table></div>

<p>Men siden det er et ord der, kan vi videreutvikle den og skrive slik:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">/</span>^H<span style="color: #009900;">&#91;</span>^\s<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">/</span>i</pre></td></tr></table></div>

<p>Så hva har du mer av i strengen etter Hello/Hei/Hi? Jo, det kommer mellomrom og mer påfølgende tekst. Teksten kan være alle tegn utenom newline. Det kan skrives slik <code>[^\n]</code>. Og den teksten var mellom 14 og 25 tegn. Da utvider vi den og lar den bli slik:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">/</span>^H<span style="color: #009900;">&#91;</span>^\s<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">&#125;</span>\s?<span style="color: #009900;">&#91;</span>^\n<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">14</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">25</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">/</span>i</pre></td></tr></table></div>

<p>Grunnen til at jeg har \s? er for det skal være space, men eventuelt ikke. Derav er det ? etter \s, for å få valgfriheten.</p>
<p>Så kan vi tenke oss at et uttrykk for en link ser slik ut:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>a<span style="color: #009900;">&#91;</span>^<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #009900;">&#93;</span>?href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;[^&amp;gt;]&quot;</span><span style="color: #009900;">&#91;</span>^<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #009900;">&#93;</span>?<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">.*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>\<span style="color: #339933;">/</span>a<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Så kan vi sette den sammen til ett uttrykk:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">/</span>^H<span style="color: #009900;">&#91;</span>^\s<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">&#125;</span>\s?<span style="color: #009900;">&#91;</span>^\n<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">14</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">25</span><span style="color: #009900;">&#125;</span>\s<span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>a<span style="color: #009900;">&#91;</span>^<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #009900;">&#93;</span>?href<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;[^&amp;gt;]&quot;</span><span style="color: #009900;">&#91;</span>^<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #009900;">&#93;</span>?<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">.*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span>\<span style="color: #339933;">/</span>a<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #009900;">&#91;</span>^<span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #009900;">&#93;</span>?<span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>\z<span style="color: #339933;">/</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2008/12/hvordan-lage-regulaere-uttrykk/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
