PDA

View Full Version : کار با عبارات با قاعده (regular expression)



qartalonline
سه شنبه 27 آبان 1393, 09:17 صبح
سلام دوستان،

من یه سری کد html میگیرم میخوام داخل این کدها اگر تگ p وجود داشت و اگه این تگ بجز style و dir ویژگی دیگر داشت اونها رو پاک کنه.
کدی که خودم نوشتم بصورت زیر هستش منتها مشکل داره و اون اینه که تو پاراگراف های شماره 0، 3، 4، 5 کامل حذف نمیکنه.


<?php
$data = PHP_EOL . '0 <p dir="rtl" class="message-success" style="margin-right:40px;text-align:justify;color:#f00;">test0</p>' . PHP_EOL
. '1 <p dir="rtl" class="message-success" style="margin-right:40px;text-align:justify;color:#f00;">test1</p>' . PHP_EOL
. '2 <p class="message-success" data-height="100" style="text-align:right;color:#f00;">test2</p>' . PHP_EOL
. '3 <p class="message-success" dir="rtl" data-height="100">test3</p>' . PHP_EOL
. '4 <p dir="rtl" data-height="100">test4</p>' . PHP_EOL
. '5 <p dir="rtl" style="text-align:right;color:#f00;" data-height="100">test5</p>' . PHP_EOL
. '6 <p class="message-success" data-height="100">test6</p>' . PHP_EOL
. '7 <p style="text-align:right;color:#f00;" data-height="100" dir="rtl">test7</p>' . PHP_EOL
. '8 <p dir="rtl" style="text-align:right;color:#f00;">test8</p>' . PHP_EOL
. '9 <p style="text-align:right;color:#f00;">test9</p>' . PHP_EOL
. '10 <p>test10</p>' . PHP_EOL
. '11 <p dir="rtl">test11</p>' . PHP_EOL;

echo $data;
echo preg_replace('#<p[[:blank:]]+.*[[:blank:]]*((?:dir|style)=.*)?[[:blank:]]+.*[[:blank:]]*((?:style|dir)=.*)?([[:blank:]]+.)*>#iU', '<p $1 $2>', $data);

wallfa
سه شنبه 27 آبان 1393, 10:20 صبح
منم دوست دارم راه حل بدونم . هر چی جستجو کردم مشکل توی کدهاتون ندیدم .

bagherok
سه شنبه 27 آبان 1393, 21:35 عصر
echo preg_replace('#<p(([^>]*(dir="rtl"|style="[^"]+")[^>]*(style="[^"]+"|dir="rtl")[^>]*)|([^>]*(dir="rtl"|style="[^"]+")[^>]*)|([^>]*(\s)[^>]*))>#i', '<p $3 $4 $6 $8 > ', $data);