PDA

View Full Version : پیدا کردن یک قسمت از رشته متنی بوسیله دادن قبل وبعد رشته



sina365
دوشنبه 27 مهر 1394, 00:09 صبح
سلام.
اول از همه یه تشکر باید بکنم از همه ی کسایی که واقعا زحمت می کشن وپاسخ میدن.اگه من یکم پاسخ های شمارو دیر چک میکنم به خاطر دانشگاه هست.منو ببخشید.با این حال من عاشق برنامه نویسی هستم.

من یه رشته متنی دارم، می خوام یه بخشی از اون رو بدم به عنوان ابتدا، و یه بخشی از اون رو بدم به عنوان انتها ; و میخوام استرینگ(رشته)مابینشو بگیرم.
مثلا فرض بگیریم رشته من این هست:

آقای "فلان" برنده مسابقه ما هستند.
من ابتدا رو میدم:
آقای

انتها رو هم میدم:
برنده

رشته مابینش میشه:
"فلان"
که من لازم دارم.

حالا همینو به زبان برنامه نویسی اگه میشه توضیح بدید.البته من خیلی مبتدی نیستم ها !! اگه سوالم مبتدیه ببخشید.
پرسیدن عیب نیست ندانستن عیب است!

djtrex
دوشنبه 27 مهر 1394, 10:13 صبح
سلام.
اول از همه یه تشکر باید بکنم از همه ی کسایی که واقعا زحمت می کشن وپاسخ میدن.اگه من یکم پاسخ های شمارو دیر چک میکنم به خاطر دانشگاه هست.منو ببخشید.با این حال من عاشق برنامه نویسی هستم.

من یه رشته متنی دارم، می خوام یه بخشی از اون رو بدم به عنوان ابتدا، و یه بخشی از اون رو بدم به عنوان انتها ; و میخوام استرینگ(رشته)مابینشو بگیرم.
مثلا فرض بگیریم رشته من این هست:

آقای "فلان" برنده مسابقه ما هستند.
من ابتدا رو میدم:
آقای

انتها رو هم میدم:
برنده

رشته مابینش میشه:
"فلان"
که من لازم دارم.

حالا همینو به زبان برنامه نویسی اگه میشه توضیح بدید.البته من خیلی مبتدی نیستم ها !! اگه سوالم مبتدیه ببخشید.
پرسیدن عیب نیست ندانستن عیب است!

1. با استفاده از توابع mb_strpos و mb_substr:



function substringByWord($start, $end, $subject) {
$startPos = mb_strpos($subject, $start);


if($startPos === false){
return '';
}


$offset = $startPos + mb_strlen($start);
$endPos = mb_strpos($subject, $end, $offset);


if($endPos === false){
return '';
}


return mb_substr($subject, $offset, $endPos - $offset);
}


2. با استفاده از regex:



function substringByRegex($start, $end, $subject) {
$start = preg_quote($start, '/');
$end = preg_quote($end, '/');


if(preg_match("/$start(.*?)$end/sm", $subject, $matches)) {
return $matches[1];
}


return '';
}


برای مثال زیر:



$text = 'آقای "فلان" برنده مسابقه ما هستند.';


echo 'MB: ' . substringByWord('آقای', 'برنده', $text) . PHP_EOL;
echo 'Regex: ' . substringByRegex('آقای', 'برنده', $text) . PHP_EOL;


خروجی:



MB: "فلان"
Regex: "فلان"



برای بررسی حالت های مختلف regex می تونید از وب سایت regexr استفاده کنید:
http://www.regexr.com/

# در ضمن دو تابع اولین کلمه ای که پیدا کنند برای start یا end در نظر میگیرند که میتونید برحسب نیاز خودتون تغییر بدید.

sina365
دوشنبه 27 مهر 1394, 19:16 عصر
واقعا دستت درد نکنه.
دمت گولی.
هر موقع ما یه سوال تو این انجمن می پرسیم افرادی مثل شما توپ جواب میدن!