Ramin Mor
3 سال پیش توسط Ramin Mor مطرح شد
10 پاسخ

جدا سازی یک سری رشته هایی با فرمت مشخص از متن و جایگزینی آنها

سلام دوستان من متونی شبیه به متون زیر دارم
"در کتاب تست بند 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) رو پیدا کنم و بجاشون یه متن خاص قرار بدم. ممنون میشم منو در این مورد راهنمایی کنید.


ثبت پرسش جدید
Ramin Mor
تخصص : کارشناس آی تی (برنامه نویسی)
@ramin.mor47 3 سال پیش آپدیت شد
0

@ehsndvr ممنون از راهنماییتون اینطوری یه تغییر کوچیک دادم تو کد.

$re = '/[\d+\-?\.?]+\d/m';
                                                        $str = $bt;
                                                        preg_match_all($re, $str, $matches);
                                                        foreach($matches[0] as $m){
                                                            if(!is_numeric($m))
                                                            echo $m.'<br>';
                                                        }

Sahandi81
تخصص : PHP - Laravel -JS
@sahandi81 3 سال پیش آپدیت شد
1

سلام.
نمیدونم دقیق تونستم متوجه منظورت بشم یا خیر اما کد زیر میتونه کمکت کنه :

<?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 پیدا و جایگزین کنی !


Ramin Mor
تخصص : کارشناس آی تی (برنامه نویسی)
@ramin.mor47 3 سال پیش مطرح شد
0

ببینید این یک نمونه متن بود. ممکنه اصلا با 1 شروع نشه. تا جایی که میدونم باید با همون عبارات باقاعده بشه استخراج کرد اما نمیدونم چجوری اینکار رو بکنم. یعنی باید از regex استفاده کنم.


احسان داوری
تخصص : برنامه نویس
@ehsndvr 3 سال پیش مطرح شد
1

سلام دوست عزیز
باید از این الگو برای پیدا کردن اعداد و جایگزین‌کردنشون با متن خاص استفاده کنید :

//الگو
 [\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);

موفق باشید


Ramin Mor
تخصص : کارشناس آی تی (برنامه نویسی)
@ramin.mor47 3 سال پیش آپدیت شد
0

یه مشکلی این عبارت داره که توی متن مثلا بنویسه "دمای 60 درجه" این رو هم تبدیل میکنه. درحالی که عباراتی باید تبدیل بشه که حتما باید اینشکلی باشن 1-1 یا 2-1 یا 2-6-5 یا 2-3-7-1 و امثال اینا.
یه مورد دیگه اینکه میشه برای هر عبارتی که پیدا میشه یه متن خاص برای هرکدوم قرار داد؟ یعنی همشون رو تبدیل به یه متن نکنیم. برای هرکدوم از عبارات یه متن متفاوت. مثل حلقه از پیمایش کنیم کلمات پیدا شده رو.


احسان داوری
تخصص : برنامه نویس
@ehsndvr 3 سال پیش مطرح شد
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 Mor
تخصص : کارشناس آی تی (برنامه نویسی)
@ramin.mor47 3 سال پیش مطرح شد
0

متاسفانه جواب نداد


احسان داوری
تخصص : برنامه نویس
@ehsndvr 3 سال پیش مطرح شد
1

@ramin.mor47
الگو نادرست بود یا foreach کار نکرد ؟


Ramin Mor
تخصص : کارشناس آی تی (برنامه نویسی)
@ramin.mor47 3 سال پیش آپدیت شد
0

@ehsndvr ممنون از راهنماییتون اینطوری یه تغییر کوچیک دادم تو کد.

$re = '/[\d+\-?\.?]+\d/m';
                                                        $str = $bt;
                                                        preg_match_all($re, $str, $matches);
                                                        foreach($matches[0] as $m){
                                                            if(!is_numeric($m))
                                                            echo $m.'<br>';
                                                        }

احسان داوری
تخصص : برنامه نویس
@ehsndvr 3 سال پیش مطرح شد
1

@ramin.mor47
خواهش میکنم ، من اون کد رو تستی نوشتم بودم یعنی آخرش شما باید بر اساس کار خودتون تغییرش میدادید و بالا نوشتید که کار نکرد من فکر کردم کد رو اشتباه دادم و تعجب کردم 😅چون کامل تستش کرده بودم ... .

خداروشکر که درست شد ، موفق باشید.


Ramin Mor
تخصص : کارشناس آی تی (برنامه نویسی)
@ramin.mor47 3 سال پیش مطرح شد
0

@ehsndvr
سلام خسته نباشید. من یه تغییری تو متنهام دادم و بند ها رو آوردم داخل کروشه [] حالا میخوام لیست تمام عبارات که اینشکلی هستن بدست بیارم:
[7-7-2-2-الف]
[1-2]
[12-5-6]
[1.2]
[4.2.5]
[d.1.3]


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام