PDA

View Full Version : سوال: Reqular Expression



mirzajavad
شنبه 06 آذر 1389, 00:11 صبح
سلام
به نظز شما كدام روش در عبارت منظم بهتره ؟
چون ميگن posix سرعتش از perl بهتره و توي php manual هم گفته اگر از تابع ereg() استفاده نشه بهتره
اصلآ استفاده از preg_match() بهتره يا ereg() ؟
حالا شما با اين وجود كدام روش رو پيشنهاد ميكنين ؟
من كمي با posix آشنايي دارم ولي يك بخش گير كردم يك الگو نياز دارم كه ميان دو تگ رو برام دريافت كنه
مثلآ محتويات بين <title> و </title> رو بگيره و توي آرايه نشون بده

ممنون ميشم اگر دوستان كمي راهنمايي كنن آخه كل نت رو گشتم فقط درباره نوع prel مقاله هستش حالا اگر نوع prel رو پيشنهاد مي دين اونو رو دنبال كنم

funpatogh
شنبه 06 آذر 1389, 00:31 صبح
ereg مال php قدیمی هست و اصلا دیگه توصیه نمیشه
به جاش از preg_match استفاده کنید


<?php
$url="http://www.funpatogh.com";
$html=file_get_contents($url);
if(preg_match('/<title>(.*)<\/title>/si', $html ,$Match ) ) {
echo $Match[1];
}
?>

mirzajavad
شنبه 06 آذر 1389, 01:10 صبح
پس با اين وجود از همون شيوه perl استفاده كنم چون اين و توابع براي perl هستش



(.*?)


نقطه براي اينه كه با كليه عبارات تطبيق داره و ميتونه هر چيزي رو نشون بده
ستاره يعني اون عبارت قبلي(معادل نقطه) ميتونه باشه يا نباشه
علامت سوال هم يعني مقادير داخل پرانتز اختياري هستن
ولي بازم درست متوجه نشدم
پرانتر ها هم براي اينه كه روي كلاس قبلي خود تاثير نذارن
و در مورد تگها هم بگين آيا در تعريف كلاسها در هنگام چاپ تگها به حساب نمي يان
و در مورد اون si هم بگين

funpatogh
شنبه 06 آذر 1389, 01:31 صبح
اون علامت سوال زیاد بود
. یعنی هرکاراکتری می تواند ظاهر شود و * به این معناست که قبل از آن می تواند 0 یا بیشتر بار تکرار شود
i به این معنیست که بین حروف کوچک و بزرگ فرقی قایل نشود
s هم به این معنیست که فضای خالی هم میتواند داشته باشد
این s رو برای اینکه بهتر متوجه بشید این مثال رو اجرا کنید


<?php
$html="<title>
funpatogh
</title>";
if(preg_match('/<title>(.*)<\/title>/i', $html ,$Match ) ) {
echo $Match[1];
}else{
echo "no";
}
?>

و بعد s بگزارید و دوباره تست کنید تا نیجه رو ببینید

ali zi zeperto
شنبه 06 آذر 1389, 21:46 عصر
سلام
سوال دارم
اگر تگ بسته <title/> تو یه خط دیگه باشه چیکار باید کرد؟چون نقطه "." بجای newline قرار نمی گیره.:افسرده:

funpatogh
یک شنبه 07 آذر 1389, 00:40 صبح
توی مثال دوم که بنده زدم همون طور که میبینید </title> توی خط 4 هست و تگ شروعش در تگ 2 پس توی یک خط نیستند و از


'/<title>(.*)<\/title>/si'
استفاده شده است