Libovolný počet znaků nebo nic – Regulární výrazy – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Libovolný počet znaků nebo nic – Regulární výrazy – Fórum – Programujte.comLibovolný počet znaků nebo nic – Regulární výrazy – Fórum – Programujte.com

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Pergoly a střechy Brno

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
fix0
Stálý člen
23. 10. 2020   #1
-
0
-

Ahoj všem,

zase já a RE, snažím se ho pochopit, základní veci chápu, ale  jak mile tam mají být skupinyapod. tak nejsem vůbec schopný,

Prosím o řešení zřejmě jednoduché úlohy.

Mám např seznam domén:

  • programujte.com
  • www.programujte.com
  • programujte.com/forum/
  • programujte.com - portál o programování

Potřebuji dva RE tak, že:

  1. Matchne všechny 4 příklady ze seznamu domén na KW "programujte".
  2. Matchne všechny 4 příklady ze seznamu domén na KW ".com" (pozor na tečku, mohlo by to být třeba ".gov.com"). Ale co jsem pochopil, tak si ten výraz můžu přizpůsobit, jen musím dát já pak pozor, aby před každou další tečku dal lomítko, takže tuhle informaci můžeme asi zanedbat.

Obecný dotaz:

Jak pomocí RE matchovat <cokoliv nebo nic><zvolene KW><cokoliv nebo nic>.

Zkoušel jsem *KW*, ale už jsem pochopil, proč to nikdy nemůže fungovat. :-D

Děkuji za pomoc.

Nahlásit jako SPAM
IP: 31.30.175.–
Řešení
gna
~ Anonymní uživatel
1253 příspěvků
23. 10. 2020   #2
-
+1
-
Zajímavé
fix +
Vyřešeno Nejlepší odpověď

   

.*KW.*
Nahlásit jako SPAM
IP: 213.211.51.–
peter
~ Anonymní uživatel
3641 příspěvků
29. 10. 2020   #3
-
0
-

#1 fix

Vis, problem take je, pro co ten reg. vyraz potrebujes. Uvedu par prikladu

Dos pouziva  

*text*


Sql pouziva zapis napr:

nazev='abc'
nazev LIKE 'abc'
nazev LIKE '%abc%' -- coz je obdoba dosu *text*
nazev ~* '%@chartio.com'


js, php tam existuji 2 typy, jeden pouzivaji oba, druhy jen php, ale jsou dost podobne, jnze jsou zas rozdilne proti sql :) 

preg_match('~.*text.*~', $str)
preg_match('/.*text.*/', $str) - stejne
str.match(/.*text.*/g)
str.match(/.*text.*/) - to dela uplne neco jineho
str.match(/.*text.*/gm) - take jineho, jine modifikatory
Php ma take modifikatory.

Takze ted je otazka, co presne potrebujes a proc udelat?

- jsou nektere znaky, ktere v textu musis lomitkovat, zkus pouzit preg_quote()
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : - #
https://www.php.net/…eg-quote.php

- tva * se zapisuje jako .*, kde . je libovolny znak, * opakovani 0-nekonecno (.? je opakovani 0-1x; jpe?g = jpg a jpeg) a take to lze zapsat jako  

.[0,]

http://www.regexp.cz/
Je treba si dat bacha, kazdy znak muze mit v nejakem okamziku jiny vyznam

- modifikatory
https://www.php.net/…odifiers.php

- ohraniceni, tusim lze pouzit jakykoliv znak, ale musi byt stejny jako na konci a znaky uvnitr pak asi musis lomitkovat. Takze muzes v php pouzit /, ale i ~#+%, podle toho, co ti vice vyhovuje pro vyraz, nevyskytuje se v nem :)

/http:\/\//
#http://#

https://www.php.net/manual/en/regexp.reference.delimiters.php

- a dalsi zakonitosti, na ktere si treba dat bacha, treba zavorkovani
Tam ma otaznik treba uplne jiny vyznam. Cili zalezi na tom, co je pred znakem
https://www.php.net/…ditional.php

Jinymi slovy, regularni vyrazy jsou zapis ruznych funkci pomoci ascii znaku. Ma to jina pravidla nez *text* nebo matematika a + b + c, kde vis, co je text a co je znamenko bez hlubsiho rozkodovani. Ale tam to jinak nejde, protoze pracuji s celou sadou ascii.

Nahlásit jako SPAM
IP: 193.84.198.–
peter
~ Anonymní uživatel
3641 příspěvků
29. 10. 2020   #4
-
0
-

kdyz to zkratim na odpoved gna, tak treba takto

preg_match('~.*text.*~', $str)
preg_match('~.[0,]text.[0,]~', $str)
.*text.*
.[0,]text.[0,]
(.)*text(.)*
.*[t][e][x][t].*

+ problemy se zavorkovanim a jine :)
https://www.php.net/…ditional.php

Nahlásit jako SPAM
IP: 193.84.198.–
peter
~ Anonymní uživatel
3641 příspěvků
29. 10. 2020   #5
-
0
-

A, jeste bych se mozna vratil k otazce proc? 

strpos('programujte.com') // a strrpos() je rychlejsi nez reg vyrazy
preg_match('~programujte\.com~')
preg_match('~programujte[.]com~')

A lze to zapsat i bez .* , pokud ti jde o nalezeni fraze v cokolivprogramujte.comcokoliv.
Ale, pokud to potrebujes nahradit i s textem cokoliv, tak tam .* byt musi.
Nahlásit jako SPAM
IP: 193.84.198.–
fix0
Stálý člen
5. 11. 2020   #6
-
0
-

@peter:

Ty vždycky z mých RE dotazů uděláš PHP úlohu. :-)

Bohužel, ani zde se nejedná o webovou aplikaci, ani nepotřebuji SQL dotaz (mimochodem s SQL LIKE pracovat umím).

Jde mi čistě o standard RE.

Plně mi vyhovuje první komentář od GNA

.*KW.*

Nicméně napsal jsi to moc hezky, určitě já a mnoho dalších lidí do budoucna využije. Díky

Nahlásit jako SPAM
IP: 31.30.175.–
peter
~ Anonymní uživatel
3641 příspěvků
6. 11. 2020   #7
-
+1
-
Zajímavé
fix +

No, a to prave, co ty povazujes za proste RE ma proste vic zapisu :) Zalezi prave na aplikaci, pro kterou ten RE sestavujes. Uz jen samotne RE ma deleni na Perl-Compatible a POSIX Extended. Jen jsem te chtel upozornit, ze ten gna zapis nemusi delat vzzdy to same a nemusi ti vyhovovat, protoze nedela jen to, co chces, ale neco trochu jineho, navic. A krom toho muze pokryt i moznosti, ktere hledas. Pokud ti vyhovuje, tak je to ok :)

Nahlásit jako SPAM
IP: 193.84.198.–
peter
~ Anonymní uživatel
3641 příspěvků
6. 11. 2020   #8
-
+1
-
Zajímavé
fix +

#7 peter
Uvedu priklad. na obe ty moznosti ti .*kw.* vybere kw=programujte.com :)

/programujte.com/
/zalohujte_a_programujte.com/

Nahlásit jako SPAM
IP: 193.84.198.–
fix0
Stálý člen
11. 11. 2020   #9
-
0
-

Přesně tak mi to vyhovuje. Jaký typ RE to je mi je asi fuk, hlavně, že to funguje. :-) Možná ten program má nějakou autodetekci typu RE, protože neuvádí, jak se má používat. Takže cajk, díky. Všem.

Nahlásit jako SPAM
IP: 31.30.175.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý