ugrás a tartalomhoz

Email címek kiszűrése preg_match() használatával

Km4t3 · 2006. Okt. 31. (K), 02.33
Szép jó "késő" estét! :)
olyan problémám lenne hogy most tanulgatom ezt a preg_match fgv-t
de nem igazán boldogulok vele...
olyat szeretnék hogy ezzel a fgv-el kiszürni egy adott szövegből az e-mail címeket.
tehát valahogy ugy kéne hogy ugye először szőközzel kezdődnie tehát
\s utána * majd @ majd megint * és megint \s nem?

preg_match ("/\s.*@*\s/", $szoveg, $tomb)
ez így nemjó ...
kérdésem lenne továbbá hogy minek oda a '.' - pont - mert látom, hogy úgy írják de nem olvastam róla hogy az minek is oda..
de lehet hogy csak én voltam figyelmetlen..
előre is köszönöm
 
1

na

Km4t3 · 2006. Okt. 31. (K), 02.56
igazság szerint azt szeretém ezzel hogy egy bizonyos szövegből kinyerni az e-mail címeket és hivatkoztatni őket "önmagukra"
nem biztos, hogy így kell de szerintem ezzel a fgv-el megoldahtó
az url kinyerésével is probálkoztam arra kisebb-nagyobb sikerrel rájöttem:

	if (preg_match ("/http:\/\/.*\s/", $szoveg, $tomb))
		{
		echo "<a href=\"".$tomb[0]."\">".$tomb[0]."</a>";
		}
de ez sem tökéletes, erre nincs jobb ötlete valakinek?
köszönöm a segítséget előre is!

ui.: bocsánat hogy kétszerre írtam le mi a "gondom"
2

re

toxin · 2006. Okt. 31. (K), 06.53
email,
\b[A-Z0-9._%-]+##kukac##[A-Z0-9.-]+\.[A-Z]{2,4}\b

url
\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]

szponzorálta a http://www.regexbuddy.com/ ill. annak regEx kifejezéskönyvtára :)

üdv t
3

minek oda a pont?

bandi · 2006. Okt. 31. (K), 08.16
Nos, a regexp beírásával nem kell bajlódnom, viszont van még egy kérdés a '.'-tal kapcsolatban. Ebből nekem úgy tűnik, hogy nem vagy tisztában a regexp alapjaival, javaslom, hogy picit nézz utána, mert nagyon hasznosak. Személyes véleményem szerint nagyon kellemes hsználni a perl-stílusú regexp-eket, javaslom a perle oldal olvasását.

A pont egyébként bármelyik karaktert jelenti, a csillag módosító mögötte azt jelenti, hogy az előtte levő betűből akárhány lehet (akár nulla is!), tehát a kereső kifejezésed nagyjából ennyit tesz: szóköz(tab, stb.), akárhány akármilyen betű, akárhány @, szóköz. Erre gyakorlatilag bármely szóközökkel határolt szövegrészlet ráillik.

üdv
bandi
4

hát

Km4t3 · 2006. Okt. 31. (K), 12.03
hát én bemásoltam:

if (preg_match ("\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]", $szoveg, $tomb))
illetve:

if (preg_match("\b[A-Z0-9._%-]+##kukac##[A-Z0-9.-]+\.[A-Z]{2,4}\b", $szoveg_2, $tomb_2))
de ezt a hibaüzenetet adja:
Warning: preg_match(): Delimiter must not be alphanumeric or backslash in /mnt/ultraweb/p/p-/p-pressz/proba.php on line 27
az én kicsi angoltudásommal lefordítva valami visza perjelet hiányol nem?

ui.: köszönöm a segítséget! és a tanácsokat! megfogadom!
5

Delimiter

Török Gábor · 2006. Okt. 31. (K), 12.18
A beékelt regurális kifejezést még az adott környezetnek megfelelően határolókarakterek (delimiter) közé kell szúrnod, majd azoknak függvényében a kifejezésben a delimitereket pedig escapelned. Perjel (slash) használata esetén az első kifejezésből a preg_match() paraméterezése a következő lesz:
<?php if (preg_match ("/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/", $szoveg, $tomb)) {} ?>
A második kifejezés gatyába rázása házi feladat.

(A hibaüzenet azt jelenti, hogy a delimiter nem lehet alfanumerikus és visszafele perjel karakter.)
6

probálkozom

Km4t3 · 2006. Okt. 31. (K), 13.13
én probálkozom...
itt van meg csináltam a tiéd mintájára az e-mail-eset:

if (preg_match("/\b[A-Z0-9._%-]+##kukac##[A-Z0-9.-]+/\.[A-Z]{2,4}/\b/", $szoveg_2, $tomb_2))
de 'ismeretlen változó' hibát ad vissza :/
amit te csináltál az ugyan hibát nem ad..
de nincs kimenete...

if (preg_match("/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/", $szoveg, $tomb))
	{
	echo "<a href=\"".$tomb[0]."\">".$tomb[0]."</a><br />";
	}
pedig van a $szoveg-ben url
7

Case sensitive

Török Gábor · 2006. Nov. 2. (Cs), 12.35
Az email esetet hibásan írtad fel. Visszafele perjelek csak a reguláris kifejezés legelején és végén legyenek. Továbbá érdemes használni az "i" kapcsolót a kis- és nagybetű megkülönböztetésének kikapcsolása végett.

<?php
$szoveg = "http://weblabor.hu/";
if (preg_match ("/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/i", $szov\
eg, $tomb)) {
  print_r($tomb);
}

$szoveg_2 = "email##kukac##cim.hu";
if (preg_match("/\b[A-Z0-9._%-]+##kukac##[A-Z0-9.-]+\.[A-Z]{2,4}\b/i", $szoveg_2, $tomb_2)) {
  print_r($tomb_2);
}
8

oh

Km4t3 · 2006. Nov. 2. (Cs), 12.57
oh nagyon köszönöm! átfogom nézni!
9

hát

Km4t3 · 2006. Nov. 2. (Cs), 15.44
hát nem kötöszködni szeretnék, de nem jó :/
ugyanis, ha csak egy e-mail cím van a szövegben, addig oké
de ha benne van pl 10 akkor is csak egyet, a legelsőt írja ki...
és ezt nemtudom miért csinálja :( talán lehet, hogy nem ezzel a fgv-el kéne ezt megoldani...
van rá ötleted, hogy ezt miért csinálja?
10

preg_match_all

Anonymous · 2006. Nov. 2. (Cs), 16.07
http://hu2.php.net/manual/hu/function.preg-match-all.php
11

ohh

Km4t3 · 2006. Nov. 2. (Cs), 16.48
oohhh jóóó lettt!!! :)
köszönöm mindenkinek!!

$szoveg = "http://weblabor.hu http://weblabor.hu";

	if (preg_match_all("/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/i", $szoveg, $tomb))
		{
		for($x=0;$x<count($tomb);$x++)
			{
			for($y=0;$y<count($tomb[$x]); $y++ )
				{
				if ($tomb[$x][$y] != "http")
					{
					print $tomb[$x][$y]."\r\n<br />";
					}
				}
			}
		}
12

hihi

Km4t3 · 2006. Nov. 2. (Cs), 19.00
ooopppsssz

function make_links_blank($text)
{
  return  preg_replace(
     array(
       '/(?(?=<a[^>]*>.+<\/a>)
             (?:<a[^>]*>.+<\/a>)
             |
             ([^="\']?)((?:https?|ftp|bf2|):\/\/[^<> \n\r]+)
         )/iex',
       '/<a([^>]*)target="?[^"\']+"?/i',
       '/<a([^>]+)>/i',
       '/(^|\s)(www.[^<> \n\r]+)/iex',
       '/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)
       (\\.[A-Za-z0-9-]+)*)/iex'
       ),
     array(
       "stripslashes((strlen('\\2')>0?'\\1<a href=\"\\2\">\\2</a>\\3':'\\0'))",
       '<a\\1',
       '<a\\1 target="_blank">',
       "stripslashes((strlen('\\2')>0?'\\1<a href=\"http://\\2\">\\2</a>\\3':'\\0'))",
       "stripslashes((strlen('\\2')>0?'<a href=\"mailto:\\0\">\\0</a>':'\\0'))"
       ),
       $text
   );
} 
13

Sziasztok.A 11.

cezar62 · 2014. Jan. 19. (V), 01.42
Sziasztok.

A 11. hozzászolásban
 print $tomb[$x][$y]."\r\n<br />";    //után szeretnék egy adatmentést beszurni
$ujlink = "insert into email values ('', '$tomb[$x][$y]', '', '', '', '')";
mysql_query($ujlink) or die(mysql_error());
de csak Array[0] Array[1] ... kapok az adatbázisban iráskor, milyen megoldással lehet helyesen beiratni az adatot?
A preg-match_all át lett irva emailra és helyesen ki is listázza a képernyöre.
if (preg_match_all("/\b[A-Z0-9._%-]+##kukac##[A-Z0-9.-]+\.[A-Z]{2,4}\b/i", $forras, $tomb)) 
Üdv. cezar62
14

Érdekes

Poetro · 2014. Jan. 19. (V), 10.14
Ha te a 11. hozzászólásra hivatkozol, akkor miért nem arra válaszolsz? És jó lenne jelölnöd, a kódot, a megfelelő BBCode jelöléssel, amit én most megetettem neked.

Szerintem kicsit merülj el a string műveletekben, ugyanis úgy tűnik nagy hiányosságok vannak (a fenti kifejezésedben legalább 3 változót iratsz ki, $tomb, $x, $y). Helyettük érdemes lenne egyetlen változót használni, a következő dolog ismeretében: nem árt tudni, hogyan érdemes SQL lekérdezéseket csinálni: escape-elés, prepared statements.
15

segítséget kérek

khing · 2015. Feb. 22. (V), 16.33
Üdv

Talán régi és nem is idevaló a kérésem , de nagyon elakadtam és szeretnék segítséget kérni


Lenne példaként egy link:
http://www.port.hu/tavkapcs_click/pls/w/films.film_page?i_film_id=78125

azt szeretném ha a preg_match leellenőrizné hogy a link hiteles e .
Tehát próbálom példában

preg_match( "http://www.port.hu/$változo/pls/w/films.film_page?i_film_id=$változo",  "http://www.port.hu/tavkapcs_click/pls/w/films.film_page?i_film_id=78125",$tomb);

a 2 $változót azért jelöltem így mert ami fix és ehez kell ragaszkodni az a http://www.port.hu/ és a /pls/w/films.film_page?i_film_id=

a segítséget előre is köszönöm
16

nem szükséges

Poetro · 2015. Feb. 22. (V), 17.56
A preg_match nem igazán szükséges, főleg ha fix darabok vannak. Jóval egyszerűbb egy substr és strpos. És a legjobb lenne, ha új témát indítanál egy teljesen különböző kérdéshez.
17

Köszönöm

khing · 2015. Feb. 22. (V), 18.28
így már ki is találtam hogy blokkoljam ha a link hibás ... túlságosan ragaszkodtam a preg_ családhoz .. Mégegyszer köszönöm