PDA

View Full Version : سوال: جایگزین کردن یک رشته در شته خاص



siavashman
دوشنبه 29 آذر 1389, 20:12 عصر
کسی میدونه چه جوری میشه با توابع replace پی اچ پی مثلا تو رشته زیر:

ax sad asj [2312] sdasd

به جای [2312] مثلا ABC جایگزین بشه.

ولی همیشه اون عدد نیست. بین [] ممکنه عددهای متفاوتی با طول متفاوتی قرار بگیره. عددها هم قابل پیش بینی نیست ولی عدد همیشه عددی صحیح هستش.

مثلا من خودم کد زیر رو نوشتم:


$str='ant xtreme loose [[234]] ';

$res=str_ireplace('['.'234'.']','ABC',$str);

echo $res;



نمیشه مثلا به جای خط دوم اینجوری نوشت؟ مثلا گفتما! چون میدونم اینجوری دنبال [[?]] میگرده




$res=str_ireplace('['.'?'.']','ABC',$str);



لطفا راهنمایی کنید

MSN_Issue
دوشنبه 29 آذر 1389, 22:19 عصر
بله ، همچین چیزی ممکنه
در مورد عبارات منظم (عبارات باقاعده) جستجو کنید ...

siavashman
دوشنبه 29 آذر 1389, 23:55 عصر
متاسفانه من چیزی خوبی پیدا نکردم میشه همین مثلای که زدم رو تکمیل کنید؟ :خجالت:

Mr.Moghadam
سه شنبه 30 آذر 1389, 00:27 صبح
سلام

عبارات با قاعده یا regex

برای کاری که میخوای از کد زیر استفاده کن
(البته باید بیشتر باهاش ور بری )


preg_replace('/[0-9]/i', 'ABC', 'ax sad asj [] sdasd');که شکل کلی این دستور به شکل زیره


preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )اانجا رو هم ببین (http://www.php.net/manual/en/ref.pcre.php)


برای ساختن و تست عبارات با قاعده این سایت بیسار عالیه


http://regex.larsolavtorvik.com (http://regex.larsolavtorvik.com/)
سوالی بود در خدمتیم

siavashman
سه شنبه 30 آذر 1389, 11:40 صبح
من کدی که شما گذاشتید رو تست کردم و فهمیدم نسبت به [] حساس نیست و کل عدد رو با ABC جایگزین نمیکنه و به ازای هر عدد یه ABC میزاره. البته میدونم باید کد خام رو گذاشته بودید و باید دستکاری میکردم همونطور که خودتون گفتید. بعد از تحقیقات من کد زیر رو نوشتم:



echo preg_replace('/^([[)(.*)(]])$/', 'ABC', 'ax sad asj [[342]] sdasd');

نمیدونم چرا جواب نمیده؟

اگه بخوایم شرطی جایگزین کنیم چی کار کنیم. مثلا اگه [[32]] بود بشه اون قسمتش



<img src="32.jpg">


و اگه [[32L]] بود بشه:



<a href="32l.jpg"><img src="32.jpg"></a>


مرسی از اینکه جواب میدید :لبخندساده:

Mr.Moghadam
سه شنبه 30 آذر 1389, 18:49 عصر
اینک یه تست بزن


ax sad asj [[342]] sdasd


preg_replace('/[[](.*)[]]/i', 'ABC', 'ax sad asj [[342]] sdasd');

که نتیجش میشه :


ax sad asj ABC sdasd

arturmacnight
سه شنبه 30 آذر 1389, 20:18 عصر
برای شرطی بودن باید از preg_replace_callback استفاده کنید. یک تابع بنویسید با شرطهایی که گفتید و preg_replace_callback رو با اون تابع اجرا کنید.