Werkt de home-knop van je iPhone slecht? Probeer dit!

Ik had een home-knop die bijna niet meer naar me luisterde. HAD, want na onderstaande ’therapie’ doet hij het weer uitmuntend. Deze therapie is geheel op eigen risico!

Je hebt nodig:

  • Alcohol (98%)
  • Een wattenstaafje
  • Een oplaadsnoertje
  • Een tissue of stukje keukenrolpapier

Met wattenstaafje alcohol deppen (met tissue gaat ook), knopje flink indrukken en draaiende beweging maken met je vinger alsof je het knopje wilt ronddraaien. Daarna snel achter elkaar drukken (zo’n 40x). Dan omgekeerd een aantal keren op een vlakke tafel laten ‘vallen’ (zie foto).

Op deze manier op een vlakke tafel laten vallen.
Op deze manier op een vlakke tafel laten vallen.

Flink rondom het knopje wrijven met een tissue om overtollig huidvet en vuil verwijderen rond de home-knop. Soms helpt centreren van de knop door te ‘liften’ met de connector van het oplaadsnoer (zie foto).

Op deze manier druk je het uiteinde van de connector licht omhoog.
Op deze manier druk je het uiteinde van de connector licht omhoog.

Bij onvoldoende resultaat eventueel herhalen.

Regex

Altijd lastig: Regular Expressions, of kortweg RegEx. Voor mezelf in dit stukje met een paar voorbeelden met bijbehorende uitleg.

Youtube
^(.+)([/]watch[?]v=)(?<key>(.+))$|^(http)(s)?[:][/]{2}youtu[.]be[/](?<key>(.+))$
Allereerst staat ergens middenin een pipe-teken (|). dat geeft aan dat deze RegEx zoekt naar twee verschillende patronen. Anders gezegd zijn er twee patronen toegestaan:
^(.+)([/]watch[?]v=)(?<key>(.+))$   en  ^(http)(s)?[:][/]{2}youtu[.]be[/](?<key>(.+))$
Ik begin bij de linker. Deze zoekt naar een patroon zoals http://www.youtube.com/watch?v=m5fNKbNuCBI
.   zoekt één willekeurig teken.
.+ zoekt tenminste één willekeurig teken
^(bla) zoekt een tekst dat begint met “bla”.
^(.+)  is dus een tekst die begint met een willekeurig aantal willekeurige tekens.
daarna staat ([/]watch[?]v=). Dus na ^(.+) wordt naar “/watch?v=” gezocht. Het maakt dus niet uit wat er voor /watch?v= staat. De slash en het vraagteken kunnen iets anders betekenen en staan dus expliciet tussen rechte haken.
(bla)$ zoekt naar bla op het einde van een tekst. Dus (.+)$ zoekt naar willekeurige tekens op het eind. De (?<key>(.+)) geeft aan dat we dit deel ‘opvangen’ in variabele ‘key’.

Dan het rechter deel. Deze zoekt naar een patroon zoals http://youtu.be/m5fNKbNuCBI
^(http)(s)?[:][/]{2}youtu[.]be[/](?<key>(.+))$
Zoekt naar tekst dat begint met ‘http’. (s)? betekent 0 of één keer ‘s’. dan moet er een dubbele punt staan, dan 2 x een slash en daarna ‘youtu.be/’ (de punt en slash moeten expliciet). Het einde komt overeen met het einde van het eerste deel.

Gebruik in PHP
In PHP ziet RegEx er iets anders uit. verschillen:
^ aan het begin wordt / en $ op het einde wordt ook /
Tekens die iets anders kunnen betekenen worden ge-escaped met \
Dus [/] wordt \/
Variabelen gaan niet zo ?<key> maar zo ?P<key>

Voorbeeld:
<?php
$str = ‘http://youtu.be/hAlLoDaAr’;
preg_match(‘/(.+)youtu.be\/(?P<key>(.+))/’, $str, $matches);
print($matches[key]);
?>
Dit geeft ‘hAlLoDaAr‘ in beeld.

Modifier Description
i Perform case-insensitive matching
g Perform a global match (find all matches rather than stopping after the first match)
m Perform multiline matching

Expression Description
[abc] Find any character between the brackets
[^abc] Find any character not between the brackets
[0-9] Find any digit from 0 to 9
[A-Z] Find any character from uppercase A to uppercase Z
[a-z] Find any character from lowercase a to lowercase z
[A-z] Find any character from uppercase A to lowercase z
[adgk] Find any character in the given set
[^adgk] Find any character outside the given set
(red|blue|green) Find any of the alternatives specified

Metacharacter Description
. Find a single character, except newline or line terminator
\w Find a word character
\W Find a non-word character
\d Find a digit
\D Find a non-digit character
\s Find a whitespace character
\S Find a non-whitespace character
\b Find a match at the beginning/end of a word
\B Find a match not at the beginning/end of a word
\0 Find a NUL character
\n Find a new line character
\f Find a form feed character
\r Find a carriage return character
\t Find a tab character
\v Find a vertical tab character
\xxx Find the character specified by an octal number xxx
\xdd Find the character specified by a hexadecimal number dd
\uxxxx Find the Unicode character specified by a hexadecimal number xxxx

Quantifiers

Quantifier Description
n+ Matches any string that contains at least one n
n* Matches any string that contains zero or more occurrences of n
n? Matches any string that contains zero or one occurrences of n
n{X} Matches any string that contains a sequence of X n’s
n{X,Y} Matches any string that contains a sequence of X to Y n’s
n{X,} Matches any string that contains a sequence of at least X n’s
n$ Matches any string with n at the end of it
^n Matches any string with n at the beginning of it
?=n Matches any string that is followed by a specific string n
?!n Matches any string that is not followed by a specific string n

RegExp Object Properties

Property Description
global Specifies if the “g” modifier is set
ignoreCase Specifies if the “i” modifier is set
lastIndex The index at which to start the next match
multiline Specifies if the “m” modifier is set
source The text of the RegExp pattern

RegExp Object Methods

Method Description
compile() Compiles a regular expression
exec() Tests for a match in a string. Returns the first match
test() Tests for a match in a string. Returns true or false