PDA

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



sara66
پنج شنبه 27 تیر 1392, 17:16 عصر
سلام
رشته زیر را در نظر بگیرید :


id="test">123456.11</td>
حالا من میخوام از رشته بالا عدد 123456.11 را بکشم بیرون .
کد زیر را نوشتم :


<?php

$pattern = '("test">[a-zA-Z0-9.,]+</td>)';
preg_match_all($pattern, $string, $matches);
print_r($matches);

?>


کار می کنه اما یک مشکل کوچیک داره ! خروجی این شکلی میشه !


"test">123456.11


اما من نمیخوام عبارت زیر در خروجی بیاد :

"test">

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

sara66
پنج شنبه 27 تیر 1392, 17:34 عصر
یک مشکل دیگه هم دارم !
رشته فقط شامل یک خط نیست و شامل چندین خط هست ، مثلا رشته به این شکل هست :


id="test1">1.1</td>
id="test2">2.2</td>
id="test3">3.3</td>
id="test4">4.4</td>

من می خوام هر ۴ عدد را بدست بیارم ، نمی خوام برای هر کدوم یک خط کد جداگانه بنویسم ، می خوام اگر امکانش هست pattern را به شکلی تغییر بدم که بتونه هر ۴ عدد را داخل آرایه بریزه و خونه اول آرایه بشه 1.1 خانه دوم 2.2 خانه سوم 3.3 و خانه چهارم عدد 4.24 را داشته باشه .
این کار شدنی هست ؟ test1 تا test4 فقط و فقط یکبار توی رشته اومدن

مرسی

Tarragon
پنج شنبه 27 تیر 1392, 17:55 عصر
سلام
از DOM (http://simplehtmldom.sourceforge.net/)استفاده کنید

sara66
پنج شنبه 27 تیر 1392, 18:06 عصر
جالب بود مرسی ، این DOM فقط میتونه مقدار یک تگ را برگردونه ؟ اگر آره به کار من نمیاد چون توی این مثال من با تگ سروکار دارم اما توی شرایط واقعی شاید تگ نباشه !!

من میخوام عدد بین ۲ رشته را بدست بیارم ، مثلا بتونم عدد 12.52 را از توی رشته aa12.52bb بکشم بیرون ، یعنی دو رشته aa و bb را به برنامه بدم و برنامه عدد 12.52 را به من بده .

sara66
جمعه 28 تیر 1392, 03:29 صبح
یعنی نمیشه ؟!

Tarragon
جمعه 28 تیر 1392, 04:23 صبح
سلام
می شه یکمی در مورد عبارات با قاعده یا REGEX تحقیق کنید.

sara66
جمعه 28 تیر 1392, 09:14 صبح
من هم با این عبارات با قاعده مشکل دارم ! منبع فارسی دارید که با مثال توضیح داده باشه ؟

Javidhb
جمعه 28 تیر 1392, 10:57 صبح
چون test1, test2 , ... همشون دارای عدد هستن باید اول اونارو حذف و بعد بقیه عددها رو بدست بیارید:



<?php
$string = 'id="test1">1.1</td>
id="test2">2.2</td>
id="test3">3.3</td>
id="test4">4.4</td>';

//حذف test#
$string = preg_replace('/test[0-9]+/', '', $string);

//استخراج بقیه اعداد
preg_match_all('!\d+\.*\d*!', $string, $numbers);

print_r($numbers);
?>

MMSHFE
جمعه 28 تیر 1392, 17:35 عصر
چرا اینقدر خودتون رو اذیت میکنید؟


$str = <<<EOT
id="test1">1.1</td>
id="test2">2.2</td>
id="test3">3.3</td>
id="test4">4.4</td>

EOT;

$numbers = array();
if(preg_match_all('#id="test[\d]*?">([\d\.]*?)</td>#', $str, $numbers)) {
print_r($numbers[1]);
}

MMSHFE
جمعه 28 تیر 1392, 17:37 عصر
سلام عزیزم من اینو برات نوشتم برو حالشو ببر
اینم از روش دوم عزیزم برو حالشو ببر - عشق کن - صفا کن
بابت اینکه اطلاعاتتون رو در اختیار دوستان قرار میدین ممنون ولی این لحن بیان، مناسب یک مکان علمی نیست. موفق باشید.