Zadejte hledaný výraz...

Regex: Vytáhnutí parametrů

crs
verified
rating uzivatele
(1 hodnocení)
20. 5. 2020 21:53:38
Zdravím,
Dostávám fragment HTML kódu, ze kterého mám vycucat dva až tři atributy ze jedné značky.
Hodnoty atributů mohou být ve dvojitých nebo jednoduchých uvozovkách (začínat a končit musí stejnou).
Atributy mohou být napsány velkými nebo malými písmeny a v libovolném pořadí. A mezi nimi mohou být na libovolném místě jiné atributy.
Příklad (chci dostat dvojici nebo trojici atributů name:property:content z každé ):
Nemohu použít knihovny typu SimpleXML, DOMDocument, protože html nedostávám celé (a validní).
Atributy vycucnout umím, ale jen pro jedno pořadí atributů a jedno použití "/'.
Znáte elegantnější přístup?
Díky.
20. 5. 2020 21:53:38
https://webtrh.cz/diskuse/regex-vytahnuti-parametru/#reply1452573
hm
verified
rating uzivatele
(20 hodnocení)
21. 5. 2020 01:09:30
function getMetaFromHTML($html){
$finalMetas = [];
preg_match_all('~~i', $html, $metas, PREG_SET_ORDER);
foreach($metas as $meta){
preg_match_all('~(+)=(?:"(*?)"|'(*?)')~i', $meta, $attributes, PREG_SET_ORDER);
$currentMeta = [];
foreach($attributes as $attribute){
$currentMeta] = $attribute?:$attribute;
}
$finalMetas[] = $currentMeta;
}
return $finalMetas;
}
var_dump(getMetaFromHTML('
Washington Post
'));
/*
array(6) {
=>
array(2) {
=>
string(8) "referrer"
=>
string(10) "unsafe-url"
}
=>
array(2) {
=>
string(27) "WebTrh, byznys, podnikání"
=>
string(8) "keywords"
}
=>
array(3) {
=>
string(1) "1"
=>
string(13) "news_keywords"
=>
string(7) "web,trh"
}
=>
array(3) {
=>
string(15) "@WashingtonPost"
=>
string(1) "1"
=>
string(12) "twitter:site"
}
=>
array(3) {
=>
string(12) "twitter:card"
=>
string(19) "summary_large_image"
=>
string(1) "1"
}
=>
array(4) {
=>
string(1) "1"
=>
string(5) "type1"
=>
string(1) "2"
=>
string(7) "og:type"
}
}*/
21. 5. 2020 01:09:30
https://webtrh.cz/diskuse/regex-vytahnuti-parametru/#reply1452572
crs
verified
rating uzivatele
(1 hodnocení)
22. 5. 2020 19:04:30
Napsal Aleš Jiříček;1584625
Díky. Zkusil jsem a vrací mi to
. Hned první preg_match_all() vyloví prázdné pole.
Nemá místo "**" ke konci 1. regexu být "*/*"? A nebo to vynechat úplně, protože "s" to pojme stejně?
A ještě bych jako modifikátor přidal "s (PCRE_DOTALL)" a možná i "u (PCRE_UTF8)".
22. 5. 2020 19:04:30
https://webtrh.cz/diskuse/regex-vytahnuti-parametru/#reply1452571
TomasX
verified
rating uzivatele
(4 hodnocení)
22. 5. 2020 19:20:38
podle mě hned v tom prvním preg_match_all je chyba, zkus z jeho konce odstranit to *, podle mě tam být nemá.
Správně by to ale mělo ošetřovat i znak >, který bude uvnitř hodnoty atributu, ještě nad tím nějaká práce bude potřeba
22. 5. 2020 19:20:38
https://webtrh.cz/diskuse/regex-vytahnuti-parametru/#reply1452570
hm
verified
rating uzivatele
(20 hodnocení)
22. 5. 2020 19:56:12
v tom prvnim regexu ma byt /* ne * to je rpeklik a byt tam ma, prtooze tag muze koncit /> a to s* fakt nepojme
na > v atributu jsem zapomnel :) nicmene ted nemam cas and tim vic dumat - zas takovy mag v regexech nejsem abych to vysvihl z hlavy, bude to doecla challenge, nebo me nejaky regex mag vyvede z omylu a bdue to jednoduche, kdo vi..
22. 5. 2020 19:56:12
https://webtrh.cz/diskuse/regex-vytahnuti-parametru/#reply1452569
Luděk Kvapil
verified
rating uzivatele
14. 6. 2020 14:43:04
Já na tohle používám https://simplehtmldom.sourceforge.io/manual.htm, nebo https://symfony.com/doc/current/components/dom_crawler.html
14. 6. 2020 14:43:04
https://webtrh.cz/diskuse/regex-vytahnuti-parametru/#reply1452568
Pro odpověď se přihlašte.
Přihlásit