Autor Zpráva
Velda
Profil
Zdravím,
mám tento kód:
<?php
$ua = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Flock/3.5.3.4628 Chrome/7.0.517.450 Safari/534.7';
preg_match('/ \(KHTML, like Gecko\)( (\w+)\/(\d{1,2}(?:\.\d{1,4}){1,3}\w*)){1,2}/', $ua, $matches);
var_dump($matches);
//array(4) { [0]=> string(56) " (KHTML, like Gecko) Flock/3.5.3.4628 Chrome/7.0.517.450" [1]=> string(19) " Chrome/7.0.517.450" [2]=> string(6) "Chrome" [3]=> string(11) "7.0.517.450" }
?>
Očekával bych, že ve vrácených odpovídající podvýrazech bude mít své místo i ta část user-agentu s Flockem, tedy jeho celá čast + samotný Flock + samotná jeho verze. Co dělám špatně? Děkuji za jakoukoli radu.

Trochu jsem výraz zjednoduššil aby nebyl tolik složitý, ale stále je to to samé...

<?php
$ua = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Flock/3.5.3.4628 Chrome/7.0.517.450 Safari/534.7';
preg_match('/ \(KHTML, like Gecko\)( (\w+)\/([^ ]+)){1,2}/', $ua, $matches);
var_dump($matches);
//array(4) { [0]=> array(1) { [0]=> string(56) " (KHTML, like Gecko) Flock/3.5.3.4628 Chrome/7.0.517.450" } [1]=> array(1) { [0]=> string(19) " Chrome/7.0.517.450" } [2]=> array(1) { [0]=> string(6) "Chrome" } [3]=> array(1) { [0]=> string(11) "7.0.517.450" } }
?>
Majkl578
Profil
preg_match ti nevrátí variabilní počet matchů. Mělo by stačit zduplikovat tu část patternu na zachycení formátu Foo/1.2.3. Samotný regulár by nejspíš šel napsat i konkrétněji (zhruba jako ta první verze, která je lepší, ale tobě se z nějakého neznámého důvodu nelíbí), dle potřeb použítí.
(A abych pravdu řekl, nikdy jsem nepochopil, proč lidi jako delimiter volí znak, který pak používají a musí jej escapovat namísto takového, který používat nebudou.)
Takže:
$ua = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Flock/3.5.3.4628 Chrome/7.0.517.450 Safari/534.7';
preg_match('~ \(KHTML, like Gecko\)( (\w+)/([^ ]+))( (\w+)/([^ ]+))~', $ua, $matches);
var_dump($matches);
array(7) {
  [0] =>
  string(56) " (KHTML, like Gecko) Flock/3.5.3.4628 Chrome/7.0.517.450"
  [1] =>
  string(17) " Flock/3.5.3.4628"
  [2] =>
  string(5) "Flock"
  [3] =>
  string(10) "3.5.3.4628"
  [4] =>
  string(19) " Chrome/7.0.517.450"
  [5] =>
  string(6) "Chrome"
  [6] =>
  string(11) "7.0.517.450"
}
VVelda
Profil *
Tak jo, udělám to takhle. Díky moc. A taky díky za tu ~ – je to pro mě novinka. :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: