• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

کمک برای regular expresion

amirsung

کاربر تازه وارد
تاریخ عضویت
28 نوامبر 2003
نوشته‌ها
210
لایک‌ها
0
محل سکونت
Madrid, Spain
سلام.

بچه ها اگر با regular expression ها کار کرده باشید دیدید که بعضی وقتا آدم بد توش گیر میکنه و هر کاری میکنه اون چیزی که میخواد در نمیاد.

من یک برنامه دارم مینویسم که نیاز دارم کامنتهای یک کامنتدونی haloscan را تفکیک کنم. کامنتها به شکل زیر ذخیره شده اند:

کد:
<p><img src="http://www.gravatar.com/avatar.php?gravatar_id=d41d8cd98f00b204e9800998ecf8427e&amp;default=http%3A%2F%2Fwww.haloscan.com%2Fimages%2Fblank.gif&amp;rating=PG&amp;size=32" alt="Gravatar" title="Gravatar" style="margin: 2px; padding: 1px; float: right;" class="gravatar">
	comment_text<br><span class="byline">
	
           commentor_name | 
	
	
	commentor_website | 
	05.11.07 - 2:05 pm | <a href="#286195" title="Link to this comment">#</a>
</span></p>




<p><img src="http://www.gravatar.com/avatar.php?gravatar_id=d41d8cd98f00b204e9800998ecf8427e&amp;default=http%3A%2F%2Fwww.haloscan.com%2Fimages%2Fblank.gif&amp;rating=PG&amp;size=32" alt="Gravatar" title="Gravatar" style="margin: 2px; padding: 1px; float: right;" class="gravatar">
	comment_text_2<br><span class="byline">
	
           commentor_name_2 | 
	
	
	
	05.11.07 - 1:30 pm | <a href="#286172" title="Link to this comment">#</a>
</span></p>

در کامنت اول، فرد آدرس وبسایتش را وارد کرده اما در دومی آنرا خالی گذاشته.

من به regular expression احتیاج دارم که تصویر اول هر کامنت را به طور کلی (کل کد img از اول تا آخر)، متن کامنت و نام کامنت دهنده و وبسایت او در صورت وارد شدن را با بتوانم با تابع preg_match_all استخراج کنم.

اگر کمکی بتوانید بکنید فوق العاده ممنون می شوم. لازم به ذکر است که خودم 2 روز کامل با سعی و خطا میخواستم پیدایش کنم که موفق نشدم.
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
47
کد:
<p><(img.*?)>(.*?)<br><span class="byline">(.*?)\|(.*?)\|(.*?)\|?(.*?)<a
 

amirsung

کاربر تازه وارد
تاریخ عضویت
28 نوامبر 2003
نوشته‌ها
210
لایک‌ها
0
محل سکونت
Madrid, Spain
سلام آقا. بسیار بسیار ممنون.
الان امتحانش میکنم ایشالا که کار کنه.
 

amirsung

کاربر تازه وارد
تاریخ عضویت
28 نوامبر 2003
نوشته‌ها
210
لایک‌ها
0
محل سکونت
Madrid, Spain
من به این صورت به کار بردمش:

کد:
#<p><(img.*?)>(.*?)<br><span class="byline">(.*?)\|(.*?)\|(.*?)\|?(.*?)<a#is

جواب نداد. جایی اشتباه کردم؟
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
47
من به این صورت به کار بردمش:

کد:
#<p><(img.*?)>(.*?)<br><span class="byline">(.*?)\|(.*?)\|(.*?)\|?(.*?)<a#is

جواب نداد. جایی اشتباه کردم؟
برای من که کار میکنه :

PHP:
<?
$str = <<<HTML
<p><img src="http://www.gravatar.com/avatar.php?gravatar_id=d41d8cd98f00b204e9800998ecf8427e&amp;default=http%3A%2F%2Fwww.haloscan.com%2Fimages%2Fblank.gif&amp;rating=PG&amp;size=32" alt="Gravatar" title="Gravatar" style="margin: 2px; padding: 1px; float: right;" class="gravatar">
	comment_text<br><span class="byline">
	
           commentor_name | 
	
	
	commentor_website | 
	05.11.07 - 2:05 pm | <a href="#286195" title="Link to this comment">#</a>
</span></p>




<p><img src="http://www.gravatar.com/avatar.php?gravatar_id=d41d8cd98f00b204e9800998ecf8427e&amp;default=http%3A%2F%2Fwww.haloscan.com%2Fimages%2Fblank.gif&amp;rating=PG&amp;size=32" alt="Gravatar" title="Gravatar" style="margin: 2px; padding: 1px; float: right;" class="gravatar">
	comment_text_2<br><span class="byline">
	
           commentor_name_2 | 
	
	
	
	05.11.07 - 1:30 pm | <a href="#286172" title="Link to this comment">#</a>
</span></p>
HTML;


preg_match_all('#<p><(img.*?)>(.*?)<br><span class="byline">(.*?)\|(.*?)\|(.*?)\|?(.*?)<a#is', $str, $match);

for ($i = 1; $i < count($match); $i++){
	for ($j = 0; $j < count($match[$i]); $j++){
		echo "$j, $i -> " . ($match[$i][$j]) . "<br>";
	}
}

?>

خروجی :

کد:
0, 1 -> img src="http://www.gravatar.com/avatar.php?gravatar_id=d41d8cd98f00b204e9800998ecf8427e&default=http%3A%2F%2Fwww.haloscan.com%2Fimages%2Fblank.gif&rating=PG&size=32" alt="Gravatar" title="Gravatar" style="margin: 2px; padding: 1px; float: right;" class="gravatar"
1, 1 -> img src="http://www.gravatar.com/avatar.php?gravatar_id=d41d8cd98f00b204e9800998ecf8427e&default=http%3A%2F%2Fwww.haloscan.com%2Fimages%2Fblank.gif&rating=PG&size=32" alt="Gravatar" title="Gravatar" style="margin: 2px; padding: 1px; float: right;" class="gravatar"
0, 2 -> comment_text
1, 2 -> comment_text_2
0, 3 -> commentor_name
1, 3 -> commentor_name_2
0, 4 -> commentor_website
1, 4 -> 05.11.07 - 1:30 pm
0, 5 ->
1, 5 ->
0, 6 -> 05.11.07 - 2:05 pm |
1, 6 ->
 

amirsung

کاربر تازه وارد
تاریخ عضویت
28 نوامبر 2003
نوشته‌ها
210
لایک‌ها
0
محل سکونت
Madrid, Spain
سلام... درسته درسته. توی تمپلیت کامنتها <br/> جانشین <br> شده بود واسه همین کار نمیکرد. خیلی لطف کردید.
 

firebird

Registered User
تاریخ عضویت
2 جولای 2005
نوشته‌ها
1,424
لایک‌ها
10
سن
47
قابلي نداشت. اين دو تا حلقه for آخر هميشه يكسانه. براي تست خيلي به درد ميخوره.
 

sasan_66

کاربر تازه وارد
تاریخ عضویت
18 جولای 2006
نوشته‌ها
450
لایک‌ها
0
براي regular expression منبع كاملي سراغ دارين؟
ممنون
 

sasan_66

کاربر تازه وارد
تاریخ عضویت
18 جولای 2006
نوشته‌ها
450
لایک‌ها
0
firebird جان از لطفت ممنونم
 
بالا