سلام دوستان من متونی شبیه به متون زیر دارم
"در کتاب تست بند 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) رو پیدا کنم و بجاشون یه متن خاص قرار بدم. ممنون میشم منو در این مورد راهنمایی کنید.
@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>';
}سلام.
نمیدونم دقیق تونستم متوجه منظورت بشم یا خیر اما کد زیر میتونه کمکت کنه :
<?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 پیدا و جایگزین کنی !
شاید پاسخ شما همینجا باشد
سلام دوست عزیز
باید از این الگو برای پیدا کردن اعداد و جایگزینکردنشون با متن خاص استفاده کنید :
//الگو
[\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
الگو نادرست بود یا foreach کار نکرد ؟
@ramin.mor47
خواهش میکنم ، من اون کد رو تستی نوشتم بودم یعنی آخرش شما باید بر اساس کار خودتون تغییرش میدادید و بالا نوشتید که کار نکرد من فکر کردم کد رو اشتباه دادم و تعجب کردم 😅چون کامل تستش کرده بودم ... .
خداروشکر که درست شد ، موفق باشید.
@ehsndvr
سلام خسته نباشید. من یه تغییری تو متنهام دادم و بند ها رو آوردم داخل کروشه [] حالا میخوام لیست تمام عبارات که اینشکلی هستن بدست بیارم:
[7-7-2-2-الف]
[1-2]
[12-5-6]
[1.2]
[4.2.5]
[d.1.3]