Geek tričko zdarma Python týden
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Pouze tento sleva až 80% na kurzy Python

Diskuze: Nefungují regularní výraz na rozpoznání normální url od url Wikipedie

Aktivity (2)
Avatar
Matěj Strnad:10.6.2018 9:20

Nevíte proč nefunguje toto:

function getWiki($url) {


    $wiki = preg_match('https://cs.wikipedia.org/wiki/(.*?)', $url, $matches) ? $matches[1] : null;

    return $wiki;
 }
$wiki = getWiki($url);
echo $wiki;

? Děkuji :) (

$url

získávám z DB )

Editováno 10.6.2018 9:21
 
Odpovědět 10.6.2018 9:20
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Matěj Strnad
Petr Čech:10.6.2018 15:31

Protože jsi napsal jen tělo toho výrazu. Musíš ještě doplnit delimitery a případně příznaky.
Musí to být '#https://cs.wikipedia.org/wiki/(.*?)#'.
PS 1: nemáš tam kotvy ^$, je to schválně?
PS 2: mělo by to na tebe křičet něco ve smyslu, že delimiter nesmí být alfanumerický znak, to máš vypnutá varování a pod?
PS 3: samozřejmě tam nemusí být #, může tam být cokoliv, co není číslo, písmeno nebo speciální znak výrazu a zároveň se to v samotném výrazu nevyskytuje.

Editováno 10.6.2018 15:32
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 10.6.2018 15:31
the cake is a lie
Avatar
Matěj Strnad:10.6.2018 15:34
  1. Není to schválně, teprve stím začínám
  2. Žádná chybová hláška je když sem to chtěl vypsat tak se nic nevypsalo :)
 
Nahoru Odpovědět 10.6.2018 15:34
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11.6.2018 8:02

Pak mas asi chybove hlasky vypnute. error_reportin­g(E_ALL)

Reg. vyraz se zapisuje, viz Petr Čech
znacka + vyraz + znacka + modifikatory
znacka = obvykle # nebo ~
A samozrejme kvuli php to musis mit v uvozovkach, jakoze string. Tak to vypada trochu divoce. Kdezto treba v javascriptu nee.

Obvykle se do znacky pouziva znak, ne 0-9 ne a-z, takovy, ktery se nevyskytuje ve vyrazu. A nebo se pouzije bezny a pokud se vyskytuje ve vyrazu, musi se zalomitkovat.
#\##

Modifikatory viz dokumentace. Urcuji treba
i = nerozlisovat mala velka pismenka
m = multiline (pokracovat i za znakem \n), atd
http://php.net/…odifiers.php
http://php.net/…ook.pcre.php

 
Nahoru Odpovědět  +1 11.6.2018 8:02
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11.6.2018 8:05

Ty chybove hlasky, co to melo napsat...
http://php.net/…examples.php
'missing starting delimiter '

Jeste doplnim, ty znacky jsou vlastne 3
znacka = obvykle # nebo ~ nebo /

Editováno 11.6.2018 8:06
 
Nahoru Odpovědět 11.6.2018 8:05
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Peter Mlich
Petr Čech:11.6.2018 8:41

Zajímavé, já viděl skoro vždy / a ne ~ nebo #. Připomíná to potom právě třeba regex v JS.

Nahoru Odpovědět 11.6.2018 8:41
the cake is a lie
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Petr Čech
Peter Mlich:11.6.2018 11:25

/ urcite nejvice. # a ~ jsem zahledl na forkach. Osobne pouzivam ~.

http://php.net/…limiters.php
http://cz.php.net/…limiters.php - a do cestiny to neprelozili :)
Often used delimiters are forward slashes (/), hash signs (#) and tildes (~). The following are all examples of valid delimited patterns.

/ - pouziva js RegExp (posix) (interval.cz 2001/2010, abclinuxu.cz 2008, itnetwork.cz 2013, linux root.cz 2000)
~ - ted zrovna nemuzu najit zdroje
# - php.net/preg_match ( 20 Yousef Ismaeil Cliprz - pouziva / i #, jinak je tam spis /)
nic - pouziva napr java, vba (vba lasakovi.com 2016).

 
Nahoru Odpovědět  +3 11.6.2018 11:25
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.