یک وبلاگ دیگر از یک برنامه نویس دیگر
نوشتههایی با برچسب PHP
عبارات با قاعده در PHP – بخش دوم
آذر ۳۰م
توی نوشته قبلی، درباره عبارات با قاعده نوشتم، و حالا میخوام ادامش بدم.
کاراکتر نقطه “.”
فرض کنید میخواید تمام کلماتی که در ابتداشون h داره و در انتهاشون llo رو پیدا کنید. مثلا hello ، یا hallo یا hollo یا هر ترکیب دیگری. اینطوری میتونید از کاراکتر نقطه استفاده کنید.
به عبارتی کاراکتر نقطه میگه هر کاراکتری باشه مهم نیست. مثلا برای این مثالی که گفتم :
/h.llo/
بعد از h هر کاراکتری باشه، پذیرفته میشه.
آکولاد باز و بسته “{}”
درباره * گفتم برای اینکه صفر یا چند کاراکتر رو شامل بشه استفاده میشه (صفر یا تعداد نامحدود) برای + هم گفتم برای انتخاب ۱ یا هر چند تا که باشه مفیده، علامت سوال هم برای یک یا هیچی. منتها گاهی لازم میشه مثلا یه الگو دست کم سه بار تکرار بشه، حداکثر ۷ بار. خوب این موقع چی؟
اگه بخواید یه الگو دقیقا یه تعداد مشخصی تکرار بشه میتونید به این صورت بنویسید :
/hel{2}o/
یعنی یک he بعدش بلافاصله دو تا l (دقیقا دو تا ال انگلیسی) و بعد یه o. یعنی همون hello.
اینجوری هم میشه نوشت :
/wel{1,2}come/
این یه مشکل بزرگ رو حل میکنه. اینجوری اول یه we اگه باشه، بعد دست کم یکی یا حداکثر دو تا l (حرف ال انگلیسی) و بعد come این الگو درست در میاد. خوب خیلی خوبه :) هر روایتی از کلمه خوش آمدید رو میشه بررسی کرد!
اگه بخوایم مینیمم رو مشخص کنیم ولی ماکزیمم مشخص نشه، میتونیم بنویسیم :
/wel{2,}come/
یعنی l باید دو بار دست کم تکرار شده باشه حالا اگه هزار بار هم تکرار شده باشه مشکلی نیست.
حالا برای نمونه :
ادامه مطلب
عبارات با قاعده در PHP – بخش اول
آذر ۲۵م
عبارات با قاعده، به نظر خیلی ها ترسناکه. به نظر خودم هم بود. تا اینکه یه کتاب خوندم دربارش و تازه پی بردم به قدرتش. (این کتاب مورد نظره : Mastering Regular Expressions نوشته Jeffrey E. F. Friedl ، منتها من نسخه ای رو خوندم که غیر قانونی دانلود شده بود و به اشتراک گذاشتن این نسخه خیلی خیلی بدتره از خوندنش!! خودتون میتونید تو وب پیداش کنید)
حالا این سری من میخوام چند تا از مهمترینهاشون رو توضیح بدم، تا هرجا که اعصابم اجازه بده!!(یا به عبارتی من قصد ندارم اینجا راهنمای کامل بنویسم. فقط یه راهنمایی مختصر!!)
توی PHP ما دو جور عبارت با قاعده داریم. یکی عبارات با قاعده POSIX Extended ، ودومی عبارات با قاعده Perl Compatible.
برای اولی تمام توابع با eregi و ereg شروع میشه. مثلا eregi_replace ولی برای دومی (Perl) این توابع با preg شروع میشن، مثل preg_replace . البته این دو تا یه سری تفاوتها دارن، من همیشه از دومی استفاده میکنم چون سریعتر و کاملتر هستن. یه تفاوت مهم اینه که توی دومی، عبارات با قاعده داخل دو تا / (علامت اسلش) قرار میگیرن.
خوب یه مثال :
^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$
خوب این معمولا الگویی هستش که برای شناسایی آدرس ایمیل استفاده میشه. خوب این یعنی چی؟ این مثال هم طریقه استفاده ازش با کمک php :
<?php
$pattern = "/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/";
$email = "mine@example.com";
if (preg_match($pattern,$email))
echo "Match";
else
echo "Not match";
خوب قضیه سادست. من از توابع مربوط به PCRE (یا همون Perl Compatible) استفاده کردم، پس ببینید که دو طرفش دو تا اسلش گذاشتم. البته همین دو تا اسلش رو بردارید و از تابع eregi استفاده کنید به جای این تابع preg_match باز هم جواب میده. خوب حالا توضیح مختصری درباره این عبارات داخل یه عبارت با قاعده.
خوب اول از همه، وقتی شما دنبال یه کلمه خاص میگردید، مثلا کلمه hello داخل یه جمله، الگوی با قاعده شما میشه همون کلمه. اینو میشه با خیلی توابع رشته ای هم انجام داد. مثلا :
ادامه مطلب
echo vs. print
آذر ۱۷م
حتما دو تا تابع echo و print رو میشناسید. این دو تا عملا یه کار رو انجام میدن. پس چرا شدن دو تا تابع؟ تفاوتشون چیه؟؟
خوب من سعی میکنم که توضیح بدم این قضیه رو.
شباهتها
هر دو تابع نیستن :) جزئی از ساختار زبانی هستن. یعنی میشه بدون پرانتز فراخوانیشون کرد ولی استفاده از توابعی مثل call_user_func و call_user_func_array براشون جواب نمیده (البته به صورت مستقیم، وگرنه اگه تو یه تابع باشن و اون یه تابع فراخوانی بشه بصورت غیر مستقیم میشه.).
پس :
//Call them like functions:
print ("This is a test<br />");
echo ("This is a test<br />");
// No parenthesis:
print "This is a test<br />";
echo "This is a test<br />";
هر دو درستن. بدون پرانتز و با پرانتز.
تفاوتها
ادامه مطلب
PHP و فایلها…
آبان ۱۸م
توی ویندوز کوچک و بزرگ بودن حروف در اسم فایلها تاثیری نداره. ولی توی لینوکس این یه کم متفاوته، مثلا تو ویندوز TEST.php و test.php یکی هستن اگه به عنوان اسم فایل استفاده بشن. خودمونی تر! تو یه فولدر نمیشه دو تا فایل رو همزمان به این دو اسم ایجاد کرد، ولی تو لینوکس میشه.
خوب، بنابراین، زمانی که مثلا تو PHP میخوایم یه فایل رو include کنیم، حتما رعایت کنیم این مساله رو و در نظر داشته باشیم که ممکنه کد ما روی لینوکس قرار بگیره،هر چند الان رو ویندوز نوشته میشه، و برعکس، یعنی به کوچکی و بزرگی اسم فایلها در ویندوز توجه کنیم و هم اینکه از این قابلیت لینوکس که فایلهای همنام ولی متفاوت از لحاظ کوچک و بزرگ بودن حروف رو میتونه کنار هم قرار بده، استفاده نکنیم، چون رو ویندوز یکی از فایلها توسط اون یکی فایل رونویس میشه.
اما مشکل اینجا یه کم بدتر هم میشه. require_once و include_once هر دو، قراره یه فایل رو هر چند بار که درخواست شد، فقط و فقط یه بار استفاده کنن. حالا فرض کنید رو ویندوز،کدی دارید به این صورت :
require_once("some_file.php");
require_once("some_file.PHP");
روی لینوکس، کلا این میگرده دنبال دو تا فایل مختلف و اگه دو فایل با این اسامی نباشه از شما خطا میگیره. اما ویندوز، اون موقع قضیه یه کم بامزه تره. فایل some_file.php دو بار (نه یک بار) require میشه، یعنی در مورد این دو تابع، بدون توجه به پلاتفرم، PHP شبیه لینوکس عمل میکنه، نه ویندوز…. حالا فرض کنید مثلا Some_file.php و SOME_file.php و…




