رگولار اکسپرژن ، آشنایی

saalek110

Well-Known Member
پست 61: کاربرد رگولار اکسپرژن در php

در صفحه ۴ تاپیک برای کاربرد در php من هدفم بود و با preg_replace کار کردم.

سالک: شاید preg_match قوائدش با preg_replace فرق داره.


مثال اول کار با
preg_replace
از سایت wschool

PHP:
$str = "Visit Microsoft!";
$pattern = "/microsoft/i";
echo preg_replace($pattern, "W3Schools", $str);


نتیجه اجرا ببینید:

PHP:
Visit W3Schools!



کد بالا ، هم جایگزین کرده و هم چاپ کرده!
 
آخرین ویرایش:

saalek110

Well-Known Member
سالک: من دنبال جایگزین کردم ، لینکها در فروم بودم ، و چند پستی که می بینید ، تلاش برای این کار بود.


PHP:
$m = '|([\w\d]*)\s?(https?://([\d\w\.-]+\.[\w\.]{2,6})[^\s\]\[\<\>]*/?)|i';
$r = '$1 <a href="$2">$3</a>';

$status_text = preg_replace($m,$r,$status_text);
echo $status_text;

 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
$url = "https://example.com/products.php?category=electronics";
$pattern = "/^(https:\/\/.+\/)([^?]+)(.*)$/";
$replacement = '<a href="$1$2">$2</a>';
$result = preg_replace($pattern, $replacement, $url);
echo $result;

PHP:
<a href="https://example.com/products.php">products.php</a>?category=electronics

لینک منبع:



سایت بالا ، مثالهای جالبی دارد. برای 1$و ‌2$
سالک: چیزی که تابحال من فهمیدم ، اینه که ‌1$ تکه اول پترن است. و 2$ تکه دوم پترن است. یعنی هر پترن ، شامل چند تکه است. مثلا تاریخ این شکلی که باشه 1403-10-21 یعنی ۲۳ برج دهم سال ۱۴۰۳ ، سال میشه مثلا 1$ یا ‌3$ ، بسته به این که کدوم طرفی بنویسیم. و ماه میشه 2$ . ماه به هر شکلی میشه 2$ . حالا اگر موقع جایگزینی با 2$ جایگزین کنیم ، فقط ماه در خروجی باقی می مونه.

پس دلار۱ و دلار۲ ، قطعات پترن ما هستند و می توانیم یکی یا تعدادی از قطعات پترن را استفاده کنیم و در خروجی در کنار عبارات اضافه شده دیگه قرا دهیم.مثلا بنویسیم ، این ماه هست 2$ ، که خروجی میشه این ماه هست 10 , یعنی قسمت دوم پترن به دنبال عبارت اضافه شده ما اومد.
در همین مثال اول این پست ، می بینید با قطعات پترن لینک ساخته.
 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
$string = "http://www.foo.bar/";

PHP:
"#^\w+://(www\.)?\w+\.\w+#i"

سالک:پترن بالا را در سایت زیر پیدا کردم:



سالک: جالبی اش اینه که قالب را خیلی جامع تعریف کرده ، مثلا www. را اختیاری گرفته. اون علامت سوال بعدش اختیاری اش می کند.

یا مثلا +w یعنی تعدادی حروف. بعلاوه سمت راست دبلیو است.

و این:

PHP:
\w+\.\w+

یعنی تعدادی حروف و بعدش یک نقطه و باز بعدش تعدادی حروف. منظورش همان foo.bar است.

حتی به جای http هم +w گذاشته ، یعنی تعدادی حروف.
 
آخرین ویرایش:

saalek110

Well-Known Member
چند پست بالا ، تلاش برای ساخت لینک بود ولی هنوز موفق نشدم.
فعلا در فروم خود از رگولار اکسپرژن برای ساخت لینک استفاده نمی کنم. شاید بعدا باز تلاش کردم.



ولی پست بعد برای انجام کار دیگری بود و موفق بود.
 
آخرین ویرایش:

saalek110

Well-Known Member
مثال دوم برای کار با preg_replace:

مدتی بعد ، می خواستم با preg_replace عددی و یک نقطه بعدش را از اول کلمات بردارم.....
با پترن زیر کار کردم:


PHP:
$pattern = "/[0-9]+\./i";

$n1=preg_replace($pattern, "", $n1);

شرح : داخل براکت یعنی اینها [ ] نوشته ۹-۰ معنی اش میشه عدد ، بعدش علامت بعلاوه یعنی حداقل یک دونه از قبلی که میشه یک دونه عدد حداقل.....پس مجموعا میشه یک عدد یک تا چند رقمی
و بعدش ، اون علامت بک اسپیس و نقطه بعدش یعنی .\ معنی اش میشه نقطه. چون در متن من بعد اعداد یک نقطه بود.
مجموعه اش داخل دو تا ممیز است و بعد ممیز دوم یک i است.
در خط بعدی کد دو تا دابل کوتیشن به هم چسبیده داریم...هر چی وسط اونها بزارید یعنی بشینه جای مورد پیدا شدا ، و من چون خالی گذاشتم ، یعنی فقط مورد پیدا شده حذف بشود.

نکته : شاید کار کردن با preg_replacen با preg_ mach فرق دارد. در صفحات قبلی این تاپیک با preg_mach کار شده ولی در صفحه ۴ تاپیک با preg_replace کار شده.

یک مثال از یک سایت برای preg_replace درپست های قبلی آوردم.
و پست فعلی هم ، حاصل چک کردن و تجربه خودم است.من توانستم با دو خط کد بالا . اعداد و نقطه بعد اون اعداد را حذف کنم و متن خالص را بدست بیاورم.
چند پست قبلی هم می خواستم لینکهای فروم را جایگزین کنم ولی کاملا موفق نبودم و فعلا اون پروژه را رها کردم.
اینها را نوشتم تا راهنمای بعدی ها باشد.



فایل های من این طوری بود: ( با php می خواستم فایلها را بخوانم و وارد دیتابیس کنم)
PHP:
1. frühling /ˈfʀyːlɪŋ /
بهار
2. sommer /ˈzɔmɐ /
تابستان
3. studieren /ʃtuˈdiːɐ̯n /
درس خواندن
4. februar /ˈfɛbɹʊʌɹ /

با php فایل را خط به خط می خوندم ، وقتی کلمه آلمانی را می خواندم ، باید عدد قبلش و نقطه بعد عدد حذف میشد. ولی وقتی کلمه فارسی خونده میشد چون عدد نداشت کاریش نداشتم و مستقیم می فرستادم به دیتابیس.
یک سری لغت است که می خواهم وارد دیتابیس کنم.
در کد بالا خوب نمایش داده نشد. عکس می فرستم:

Screenshot_۲۰۲۴-۰۹-۳۰_۰۹۵۶۵۱.jpg


و هر وقت خواستید چیزی را وارد دیتابیس کنید یادتان باشد دیتابیس اصلا از کوتیشن خوشش نمی آید

مثلا این:

کد:
wie geht's?

به آلمانی یعنی حالت چطوره و کوتیشن داره بعد حرف t ، این باعث شد برنامه ریختن در دیتابیس از کار افتاد. فکر کنم کوتیشن با کدها تداخل ایجاد می کنه.

، پس اینو بنویسید:

PHP:
$n1=htmlspecialchars($n1);

نگران نباشد ، تابع htmlspecialchars با یک چیزهای جایگزین می کند که موقع چاپ در سایت همون کوتیشن نمایش داده میشه ولی جیزهای بی خطر است.

در کل بالا ، اون متغیر $n1 را می توانید با متغیر خودتان جایگزین کنید.

این ربطی به رگولار اکسپرژن نداره...حذف کاراکترهایی است که مشکل ایجاد می کنند در سایت. شرحش را با سرچ می توانید بخوانید. اینجا جای توضیح این نیست. چون ربطی به رگولار اکسپرژن ندارد.
 
آخرین ویرایش:

saalek110

Well-Known Member

اگر فقط جایگزینی ، کار شما را راه نمی اندازد و یک تابع می خواهید استفاده کنید از

preg_replace_callback استفاده کنید.
 

saalek110

Well-Known Member
بازدید تاپیک به دو هزار رسید.


خوشحالم که تاپیک موفقی شد.

من الان رگولار اکسپرژن شده یک وسیله مفید برام ، قبلا برام گنگ بود و حالت معما داشت.
ولی حالا خیلی گره ها را با رگولار اکسپرژن باز می کنم.

توصیه می کنم یاد بگیرید ، اولش کمی سخت و گنگ به نظر می رسه ولی چیز ساده ای است. فقط باید بهش خو بگیرید.
 

جدیدترین ارسال ها

بالا