سلام !
:20:
تو PHP چجـــوری میشه یک رشته ای که بین دو رشته معین دیگه قرار داره رو به دست آورد !؟
برای مثال :
می خوام چیزی که بین <g1> و <g2> قرار داره رو توی یک متغیر بیارم ...کد:<g1>Hello<g2>
مــمنون میشم راهنمایــــی کنید ...
Printable View
سلام !
:20:
تو PHP چجـــوری میشه یک رشته ای که بین دو رشته معین دیگه قرار داره رو به دست آورد !؟
برای مثال :
می خوام چیزی که بین <g1> و <g2> قرار داره رو توی یک متغیر بیارم ...کد:<g1>Hello<g2>
مــمنون میشم راهنمایــــی کنید ...
چند تایی تابع هست کارشون اینه من زیاد استفاده نکردم
از عبارات منظم هم میتونی استفاده کنی
کد:http://www.forum.p30world.com/showthread.php?t=311351
میشه بیشتر توضیح بدی ؟
با عبارت منظم چجوری میشه ؟
خب یه الگو براش مشخص میکنی که عبارت بین اون تا تگ رو بدست بیاره
مثلا
نقل قول:
من یه رشته به صورت زیر دارم:Wiley | English | 2009-06-09 | ISBN: 0470193417 | 272 pages | PDF | 5,3 MBحالا میخوام با regex در php فقط قسمت 5,3 MB رو ازش دربیارم
تو کد بالا اومده عبارتی رو که به " | " ختم میشه رو جدا کنه و تو آرایه $components بریزه اینطوری رشته به 7 قسمت تقسیم میشه که آخریش [6] همونی که میخوایمکد:
$string = 'Wiley | English | 2009-06-09 | ISBN: 0470193417 | 272 pages | PDF | 5,3 MB';
$components = preg_split('#\|#', $string);
echo $components[6];
طرز الگو نویسی رو اگه بلد باشی میتونی طوری بنویسی که اون چیزی میخای رو بدست بیاری
مثلا شما
<g1>Hello<g2> رو داری
>Hello< رو میخای یعنی عبارتی که بین >و< قرار داره فکر نمیکنم زیاد سخت باشه
تابع explod هم هست که البته نمیدونم به کاره شما میاد یا نه
طرز کارش اینه که یه رشته رو میشکونه و میریزه تو آرایه حالا اون نقطه شکست یه چیزی که خودمون تعیین میکنیم مثلا علامت |
مثلا
[php] <?php
$str = 'one|two|three|four';
// positive limit
print_r(explode('|', $str, 2));
// negative limit (since PHP 5.1)
print_r(explode('|', $str, -1));
?>
The above example will output:
Array
(
[0] => one
[1] => two|three|four
)
Array
(
[0] => one
[1] => two
[2] => three
)
[/php]
اگر استرینگ به همین سادگیه این الگو باید کار کنه:نقل قول:
[php]
<?php
$str = "<g1>Hello<g2>";
preg_match_all("@<g1>(.*)<g2>@", $str, $res);
print_r($res[1]);
?>
[/php]
ممنون از همگی !
می خواستم توی یک صفحه HTML این تگ رو در بیارم !نقل قول:
مثلا شما
<g1>Hello<g2> رو داری
>Hello< رو میخای یعنی عبارتی که بین >و< قرار داره فکر نمیکنم زیاد سخت باشه
تابع explod هم هست که البته نمیدونم به کاره شما میاد یا نه
شما خودت بهتر می دونی توی یک صفحه هزار تا >.*< وجود داره !
Explode هم فقط با یک حرف جدا می کنه مثلاً بین دو تا , ---- , من می خوام بین دو تا حرف که یکی نیستن این کارو بکنم
من این رو تست کردم ولی جوابی که گرفتم این بود : با همون print_rنقل قول:
اگر استرینگ به همین سادگیه این الگو باید کار کنه:
[PHP]
<?php
$str = "<g1>Hello<g2>";
preg_match_all("@<g1>(.*)<g2>@", $str, $res);
print_r($res[1]);
?>
[/PHP]
اصلاً من نمی دونم print_r چیه ؟!! با print که میزنم میگه Array ... در حالی که من اندیس آرایه رو بهش دادم !کد:Array
(
[0] => Hello
)
print_r برایه چاپ مقادری آرایه به کار برده میشه اگه میخای با print بنویسی اول بریز تویه آرایه مثل اولین مثالی که برات زدم اونو نگا تا متوجه بشی
print_r برای آرایه ها نام کلید و مقدار اون رو برای هر عضو آرایه چاپ میکنه
res$ که توی preg_match_all استفاده شده شامل همه قسمتهایی میشه که با الگو مچ میشن! (که یک آرایه هست)
[1]res$ که توی print_r استفاده شده شامل همه قسمتهایی میشه که با قسمتهای داخل پرانتز در الگو مچ شده. یعنی همون چیزی که شما لازم دارید. مقدار این عضو هم یک آرایه هست چون ممکنه تعداد بیشتری از این مچ ها وجو داشته باشه
برای اینکه ازش استفاده کنید میتونید با for یا foreach لوپ کنید و همه مقدار ها رو بگیری یا اینکه مستقیماً اندیس آرایه ها رو بدید و مقدارش رو بگیرید. مثلاً اگر یک گزینه داشته باشید که با الگو مچ بشه میتونید به این صورت مقدارشو به دست بیارید:
[php]
$result = $res[1][0];
[/php]
خیلــــــــــــی ممنون !
مشکل با همین دومی حل شد !!
ممنون از شما neopersia و MAXXX !!!
کد:$res[1][0];
یک مشکل دیگه !
من می خوام این کار رو بین کدهای HTML انجام بدم !
یعنی یک سری کد HTML دارم بینش <g>Hello</g> ــه
[HTML]
<html>
<body>
Salam
<g>
Hello
</g>
</body>
</html>
[/HTML]