سلام دوستان من متونی شبیه به متون زیر دارم
"در کتاب تست بند 2-4 و همچنین بند 5-6-1 وزیر بند 3-1-2-5 موارد ذکر شده موجود میباشد. همچنین در متن 2-3 و 1-2-1-1 این مورد بررسی گردیده است."
"test page in 2.3.1 and 1.1.2 "
میخوام که عبارات (2-4) و (5-6-1) و (3-1-2-5) و (2-3) و (1-2-1-1) و (2.3.1) و (1.1.2) رو پیدا کنم و بجاشون یه متن خاص قرار بدم. ممنون میشم منو در این مورد راهنمایی کنید.
سلام.
نمیدونم دقیق تونستم متوجه منظورت بشم یا خیر اما کد زیر میتونه کمکت کنه :
<?php
$txt = "در کتاب تست بند 2-4 و همچنین بند 5-6-1 وزیر بند 3-1-2-5 موارد ذکر شده موجود میباشد. همچنین در متن 2-3 و 1-2-1-1 این مورد بررسی گردیده است.test page in 2.3.1 and 1.1.2 ";
# جایگذاری متن
$replaced = str_replace('1-', 'یه متن خاص', $txt);
print($replaced);
?>
تمامی 1-
هارو جایگزین میکنه.
روش حرفه ایی ترش هم با preg_replace()
که عبارت مورد نظرت رو باید با regex پیدا و جایگزین کنی !
ببینید این یک نمونه متن بود. ممکنه اصلا با 1 شروع نشه. تا جایی که میدونم باید با همون عبارات باقاعده بشه استخراج کرد اما نمیدونم چجوری اینکار رو بکنم. یعنی باید از regex استفاده کنم.
سلام دوست عزیز
باید از این الگو برای پیدا کردن اعداد و جایگزینکردنشون با متن خاص استفاده کنید :
//الگو
[\d+\-?\.?]+\d+
//PHP نمونه الگو در
$re = '/[\d+\-?\.?]+\d+/m'
//PHP نمونه کد برای جایگزینکردن
$re = '/[\d+\-?\.?]+\d+/m';
$str = 'در کتاب تست بند 2-4 و همچنین بند 5-6-1 وزیر بند 3-1-2-5 موارد ذکر شده موجود میباشد. همچنین در متن 2-3 و 1-2-1-1 این مورد بررسی گردیده است.test page in 2.3.1 and 1.1.2 1.2.3.5.6.4.7.8.8';
echo preg_replace($re , " متن خاص شما" , $str);
موفق باشید
یه مشکلی این عبارت داره که توی متن مثلا بنویسه "دمای 60 درجه" این رو هم تبدیل میکنه. درحالی که عباراتی باید تبدیل بشه که حتما باید اینشکلی باشن 1-1 یا 2-1 یا 2-6-5 یا 2-3-7-1 و امثال اینا.
یه مورد دیگه اینکه میشه برای هر عبارتی که پیدا میشه یه متن خاص برای هرکدوم قرار داد؟ یعنی همشون رو تبدیل به یه متن نکنیم. برای هرکدوم از عبارات یه متن متفاوت. مثل حلقه از پیمایش کنیم کلمات پیدا شده رو.
بنده یه جای الگو اشتباه کرده بودم و برای همین اگر در متنی شما عدد دیگه هم بود شناسایی میکرد.
^[\d+\-?\.?]+\d+$
و بله شما میتونید به ازای هر عدد پیدا شده یه متن خاص قرار بدین :
$re = '/^[\d+\-?\.?]+\d+$/m';
$str = 'دمای 60 درجه
60-50
50.30.90.80';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
foreach($matches[0] as $m){
echo $m;
}
@ramin.mor47
خواهش میکنم ، من اون کد رو تستی نوشتم بودم یعنی آخرش شما باید بر اساس کار خودتون تغییرش میدادید و بالا نوشتید که کار نکرد من فکر کردم کد رو اشتباه دادم و تعجب کردم 😅چون کامل تستش کرده بودم ... .
خداروشکر که درست شد ، موفق باشید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟