نحوه گرفتن متن درون یک تگ HTML با Regex PHP

PHP -
2 هفته پیش
توسط احسان آپدیت شد
احسان ( 5120 تجربه )
2 هفته پیش
تخصص : دانشجو عمران

سلام

میشه یه راهنمایی کنید که چطور متن درون یک تگ رو با استفاده ازregex بگیرم من اطلاعات یک صفحه رو با simple_html_dom گرفتم

این ساختار html:

<li class="list-item p-a-0 content-rating">
<b class="inline">Rating:</b>
  13+ - Teens 13 or older
</li>
<li class="list-item p-a-0">
<b class="inline">Country:</b>
   China
</li>

مثلا فقط اسم کشور که China هست رو می خوام یا مثلا رده سنی +13 - Teens 13 or older

این کد های regex منه

<?php
if(preg_match('/Country/i', $subelement->innertext)){
 preg_match_all('/\D/g', $element->plaintext, $matches);
 $country = implode(',', $matches[0]);
}
?>
بهترین پاسخ انتخاب شده توسط احسان
Mohammad Amin Mokhtari
2 هفته پیش

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

  • حروف انگلیسی بزرگ و کوچک
  • اعداد
  • _
  • فاصله
    باشد را قبول می کند

در صورت وجود کاراکتری غیر از لیست بالا، مقدار داخل تگ بازگشت داده نمی شود

$re = '/>((\s|[a-zA-Z]|[0-9]|_|-|\+)+\s)</m';
$str = '<li class="list-item p-a-0 content-rating">
<b class="inline">Rating:</b>

  13+ - Teens 13 or older

</li>
<li class="list-item p-a-0">
<b class="inline">Country:</b>

   China

</li>';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
$result=[];
// Print the entire match result
foreach ($matches as $match) {
    $m=trim($match[1]);
    if (strlen($m)>2) {
        array_push($result, trim($match[1]));
    }

}
var_dump($result);
Mohammad Amin Mokhtari ( 7010 تجربه )
2 هفته پیش
تخصص : برنامه نویس

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

  • حروف انگلیسی بزرگ و کوچک
  • اعداد
  • _
  • فاصله
    باشد را قبول می کند

در صورت وجود کاراکتری غیر از لیست بالا، مقدار داخل تگ بازگشت داده نمی شود

$re = '/>((\s|[a-zA-Z]|[0-9]|_|-|\+)+\s)</m';
$str = '<li class="list-item p-a-0 content-rating">
<b class="inline">Rating:</b>

  13+ - Teens 13 or older

</li>
<li class="list-item p-a-0">
<b class="inline">Country:</b>

   China

</li>';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
$result=[];
// Print the entire match result
foreach ($matches as $match) {
    $m=trim($match[1]);
    if (strlen($m)>2) {
        array_push($result, trim($match[1]));
    }

}
var_dump($result);
Mohammad Amin Mokhtari ( 7010 تجربه )
2 هفته پیش
تخصص : برنامه نویس

در این لینک می توانید تست های خود را انجام بدهید:
https://regex101.com/r/nlUOA0/2

احسان ( 5120 تجربه )
2 هفته پیش
تخصص : دانشجو عمران

@amin.mokhtari94
ممنون کدی که فرستادیت به خوبی کار می کنه
اگه بتونید با کد زیر هماهنگ کنید خیلی ممنون میشم:

<?php
 if(preg_match('/Country/i', $subelement->innertext)){

 }
 ?>

$subelement->innertext همون $str هست

برای ارسال پاسخ باید وارد سایت شوید