Mám výraz:
'/(\H+)@(\w+[-]?\w+).(\w+)/i'
což najde mail včetně pomlčky v doméně, jde to zapsat i líp než takhle blbě? A hlavně, jak to předělat, aby to fungovalo, i když tam bude víc teček (subdoména)? Děkuji :)
Mám výraz:
'/(\H+)@(\w+[-]?\w+).(\w+)/i'
což najde mail včetně pomlčky v doméně, jde to zapsat i líp než takhle blbě? A hlavně, jak to předělat, aby to fungovalo, i když tam bude víc teček (subdoména)? Děkuji :)
U reg vyrazu by asi bylo dobre uvest vsechny moznosti pro shodu a pripadne nejake, kdy to vyhovovat nema. Tvrdit, ze to funguje a nepokryt vsechny moznosti, to je amaterska prace zaka zakladni/stredni skoly.
'/(\H+)@(\w+[-]?\w+).(\w+)/i'
- Nevim, co je H, ale jestli pismeno, pak H+ je opakovani 1 az nekonecno, cili 'H', 'HH', 'HHH', 'HHHH', asi to melo byt \w
- \w[-]?\w je 't-t', 'text-text', 'te', 'text' (bez cisel)
- tecka bez lomitka je jakykoliv znak, ale nejspis tam nelo byt lomitko
- \w je
(Coz ani zdaleka nepokryva realnou adresu)
'/(\H+)@(\w+[.]?\w+[-]?\w+[.]?\w+[-]?\w+[.]?\w+).(\w+)\s/i'
:)))
Co tak to proste ozavorkovat? (\w+[-]?\w+[.]?)+\.\w+
Coz je kombinace (text-?text.?) {opakuj} text, cili t-t.t-t.t-t, t.t, t-t.t, t-t.t ...
#3 peter
H+ je vše kromě horizontálních bílých znaků (doplněk '\h')
(http://interval.cz/…atecniky-ii/)
- tecka bez lomitka je jakykoliv znak, ale nejspis tam nelo byt lomitko:
mě to normálně funguje tak, že to bere jako tečku. Fakt to funguje.
Tecka, jak jsi to psal, je jakykoliv znak
\w+.\w+ - vyhovuje aaa.aaa, aaa?aaa, aaa5aaa, jakykoliv znak, krome \w
ale take aaaaa, kde to rozdeli jako aaa?a
http://www.regexp.cz/index.php
1 = \w+.\w+
2 = aaaaa
4 = php preg
Co na opakovani neni jasne?
+ je 1x az nekonecno, take {1,1}
? je 1x, take {1}
* je 0x az nekonecno {0,}
{3,7} je 3x az 7x
a+ je opakovani a, aa, aaa ...
ab+ je opakovani ab, abab, ababab ...
(a+b)+ je opakovani (ab, aab, aaab) kombinace cili treba (aaab)(ab)(aab)(ab) (bez zavorek, ty jsou pro nazornost)
regexp.cz: 1 = (a+b)+ 2 = aaababaabab
Jestli misto (a+b)+ napises (\w+[-]?\w+[.]?)+ je celkem jedno, kdyz vis, co odpovida kombinaci \w+[-]?\w+[.]?, kterou pluskem opakujes.
A ted pozor, dalsi zaludnost.
a+ vyhovuje take axyz xyza
Proc? Protoze jsi retezec neohranicil pocatkem a koncem, tak hleda kdekoliv v textu
^a+$ to uz napise nevyhovuje pro axyz
regexp.cz: 1 = ^a+$ 2 = axyz
Pro názornost, co jsem vůbec chtěl udělat - mám nějaký článek a chci převést maily na odkazy a dál s tím pak pracovat:
$pattern = '/(\H+)@(\w+[.]?\w+[-]?\w+[.]?\w+[-]?\w+[.]?\w+)\.(\w+)/i';
$replacement = '<a href="mailform.php?mail=${1}@$2.$3">$1@$2.$3</a>';
$text = preg_replace($pattern, $replacement, $text);
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku