صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 15 من 17

الموضوع: مساعدة في الـ regex

  1. #1
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    61

    مساعدة في الـ regex



    السلام عليكم
    كود:
    < p  s t y l e = " o n e " > o n e t w o t h r e e < / p >

    كيف اقدر الغي المسافات اللي داخل الاقوس <> بإستخدام preg_replace
    مع ملاحظة ترك مسافة بعد معرف الوسم

    بحيث يطلع
    كود:
    <p style="one">o n e t w o t h r e e</p>








  2. #2
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    61


    الرفع للضرورة






  3. #3
    عضو نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    255


    السلام عليكم
    كود:
    < p s t y l e = " o n e " > o n e t w o t h r e e < / p >
    كيف اقدر الغي المسافات اللي داخل الاقوس <> بإستخدام preg_replace
    مع ملاحظة ترك مسافة بعد معرف الوسم

    بحيث يطلع
    كود:
    <p style="one">o n e t w o t h r e e</p>
    كود PHP:
    $string='< p s t y l e = " two" > o n e t w o t h r e e < / p >';

    $new preg_replace('%< p s t y l e = "([\s\w]+)" >(.*)< / p >%iU','<p style="$1">$2</p>',$string);
    echo 
    htmlentities($new);
    //OUTPUT: <p style=" two"> o n e t w o t h r e e </p> 
    بس للاسف مابتنفعش لو كان فيه مسافات بين اسم الستايل
    < p s t y l e = " o n e "
    لازم تكون
    < p s t y l e = " one "

    حاولت استخدم
    كود PHP:
    $new preg_replace('%< p s t y l e = "([\s\w]+)" >(.*)< / p >%iUe',"'<p style=\"'.str_replace(' ','c',$1).'\">$2</p>'",$string);
    //OUTPUT: <p style="two"> o n e t w o t h r e e </p>
    // لاحظ عدم وجود مسافات قبل كلمة two او بعدها 
    بس طلعت المسافات اللي قبل الكلمة وبعدها مش اللي في النصف بين الحروف
    + اوجه التقصير الأخري :
    1 - إذا كان هناك تغيير في عدد المسافات في p s t y l e , يعني مثلا هناك مسافتين بدل واحده بين كل حرف , لن تصلح الا إذا استخدمت \s* بين كل حرف والاخر
    2 - REGEX بطيئة وتستهلك موارد السيرفر
    جاري عمل محاولات اخري





    التعديل الأخير تم بواسطة Aloha ; 19-09-2008 الساعة 10:20 PM
    __________________
    وفوق كل ذي علم عليم !..

  4. #4
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    61


    حبيب قلبي اللي فوق مجرد مثال , قصدي بشكل عام وبكل بساطه كيف اقدر الغي المسافات "المفردة" اللي داخل الاقواس






  5. #5
    عضو نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    255


    حبيب قلبي اللي فوق مجرد مثال , قصدي بشكل عام وبكل بساطه كيف اقدر الغي المسافات "المفردة" اللي داخل الاقواس
    المشكلة اننا لازم نحافظ علي سلامه كود ال HTML
    يعني لو لغينا المسافات من
    كود:
    < p  s t y l e = " o n e " > o n e t w o t h r e e < / p >
    ستصبح
    كود:
    <pstyle="one">onetwothree</p>
    وسنكتفي بإستخدام str_replace
    ولكننا نريدها
    كود:
    <p style="one"> o n e t w o t h r e e </p






    __________________
    وفوق كل ذي علم عليم !..

  6. #6
    عضو نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    255


    راجع بعد ساعتين ان شاء الله





    __________________
    وفوق كل ذي علم عليم !..

  7. #7
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    947


    تستطيع عملها ايضا عن طريق الدالة implode او الدالة join





    __________________
    قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير

  8. #8
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    61


    aloha اشكر لك مساعدتك وأنا بالإنتظار
    انت ذكرت نقطه ان اذا حذفنا المسافات راح يكون الوسم غير مقروء , لكن نقدر نعدي هالمشكلة بحذف المسافات المفردة بين الاحرف والمسافة بين الـ p و style عبارة عن ثلاث مسافات تقريباً


    ها يامبرمجين الهمه الهمه من يحلها






  9. #9
    عضو نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    255


    aloha اشكر لك مساعدتك وأنا بالإنتظار
    انت ذكرت نقطه ان اذا حذفنا المسافات راح يكون الوسم غير مقروء , لكن نقدر نعدي هالمشكلة بحذف المسافات المفردة بين الاحرف والمسافة بين الـ p و style عبارة عن ثلاث مسافات تقريباً


    ها يامبرمجين الهمه الهمه من يحلها

    هذا حل مؤقت , مع انه يقوم بالمطلوب تماما كما طلبت انت , ولكني متأكد انه بطئ وغير منظم نوعا ما ,, ولكنه يقوم بالمهمه وخلاص
    كود PHP:
    $string='< p s t y l e = " t h re   e " > o n e t w o t h r e e < / p > < p s t y l e = " o n e " > o n e t w o t h r e e < / p >';;

    $new preg_replace('%(<\s*p\s*s\s*t\s*y\s*l\s*e\s*=\s*"[a-zA-Z ]+"\s*>)(.*)(<\s*/\s*p\s*>)%iUes',"str_replace(' ','','\\1').'\\2'.str_replace(' ','','\\3')",$string);
    $new stripslashes($new);
    $new str_ireplace('psty','p sty',$new);
    echo 
    htmlentities($new);
    // سيصبح الناتج
    // <p style="three"> o n e t w o t h r e e </p> <p style="one"> o  n e t w o t h r e e </p> 
    طبعا لن يعمل الا مع P style و حليت مشكلة المسافات الغير متساوية بوضع \s*





    التعديل الأخير تم بواسطة Aloha ; 20-09-2008 الساعة 03:18 PM
    __________________
    وفوق كل ذي علم عليم !..

  10. #10
    عضو نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    255


    صغرّت الكود شوية 20 حرف : )
    كود PHP:
    $string='< p   s t y l e = " t h re   e " > o n e t w o t h r e e < / p > < p s t y l e = " o n e " > o n e t w o t h r e e < / p >';

    $new preg_replace('%(<[pstyle= ]*"[a-zA-Z ]+"\s*>)(.*)(<\s*/\s*p\s*>)%iUes',"str_replace(' ','','\\1').'\\2'.str_replace(' ','','\\3')",$string);
    $new stripslashes($new);
    $new str_ireplace('psty','p sty',$new);
    echo 
    htmlentities($new);
    //OUTPUT: <p style=" two"> o n e t w o t h r e e </p> 
    // [pstyle= ]*
    // بدلا من 
    //\s*p\s*s\s*t\s*y\s*l\s*e\s*=\s* 
    بس لو فيه مشكلة ارجع للقديم





    التعديل الأخير تم بواسطة Aloha ; 20-09-2008 الساعة 03:31 PM
    __________________
    وفوق كل ذي علم عليم !..

  11. #11
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    61


    يعطيك الف عافية
    تصدق انك بحلك هذا عطيتني فكرة حل تشتغل على اي نوع من الأوسمة بدون مشاكل

    كود:
    $chars = '< p  s t y l e = " o n e " > o n e t w o t h r e e < / p >';
    $chars = preg_replace('/<(.*)>/Ues',"'<'.str_replace('  ','-',\"\\1\").'>'",$chars);
    $chars = preg_replace('/<(.*)>/Ues',"'<'.str_replace(' ','',\"\\1\").'>'",$chars);
    $chars = preg_replace('/<(.*)>/Ues',"'<'.str_replace('-',' ',\"\\1\").'>'",$chars);
    أو وش رايك نفصلها في فانكشن خارجي تتوقع تكون اسرع يعني بالطريقة
    كود:
    function deletspace($a){
    $chars = str_replace('  ','-',"$a");
    $chars = str_replace(' ','',"$chars");
    $chars = str_replace('-',' ',"$chars");
    return $code;
    }
    $chars = '< p  s t y l e = " o n e " > o n e t w o t h r e e < / p >';
    $chars = preg_replace('/<(.*)>/Ues',"'<'.deletspace(\"\\1\").'>'",$chars);
    ها وش رايك وش اعتمد اي الطريقتين ؟






  12. #12
    عضو نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    255


    يعطيك الف عافية
    تصدق انك بحلك هذا عطيتني فكرة حل تشتغل على اي نوع من الأوسمة بدون مشاكل

    كود:
    $chars = '< p  s t y l e = " o n e " > o n e t w o t h r e e < / p >';
    $chars = preg_replace('/<(.*)>/Ues',"'<'.str_replace('  ','-',\"\\1\").'>'",$chars);
    $chars = preg_replace('/<(.*)>/Ues',"'<'.str_replace(' ','',\"\\1\").'>'",$chars);
    $chars = preg_replace('/<(.*)>/Ues',"'<'.str_replace('-',' ',\"\\1\").'>'",$chars);
    أو وش رايك نفصلها في فانكشن خارجي تتوقع تكون اسرع يعني بالطريقة
    كود:
    function deletspace($a){
    $chars = str_replace('  ','-',"$a");
    $chars = str_replace(' ','',"$chars");
    $chars = str_replace('-',' ',"$chars");
    return $code;
    }
    $chars = '< p  s t y l e = " o n e " > o n e t w o t h r e e < / p >';
    $chars = preg_replace('/<(.*)>/Ues',"'<'.deletspace(\"\\1\").'>'",$chars);
    ها وش رايك وش اعتمد اي الطريقتين ؟
    الفانكشن طبعا لو العملية دي هتتكرر أكتر من مرة

    وممكن تستخدم PHP: preg_replace_callback - Manual





    __________________
    وفوق كل ذي علم عليم !..

  13. #13
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    61


    ماراح تتكرر
    لكن str_replace اسرع من preg_replace فأعتقد ان طريقة الفنكشن افضل






  14. #14
    عضو نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    255


    ماراح تتكرر
    لكن str_replace اسرع من preg_replace فأعتقد ان طريقة الفنكشن افضل
    الصراحة انا مش فاهم الحل بتاعك , بس عرفت انك عايز تسيب المسافتين فبتحولها الي - لتحفظ وبعدين تشيل المسافه وترجع ال - تاني لمسافه واحده

    كان ممكن تستخدم
    كود PHP:
    /
    للمسافة الواحده
    و تستخدم
    كود PHP:
    /s/s
    لمسافتين او اكثر

    ملحوظة : في الكود اللي فوق استخدمت / بدل \ عشان مابيظهرش اما اجي اكتبه مش عارف ليه بس المفروض نستخدم \.. باينهم مستخدمين stripslashes هنا ولا ايه





    التعديل الأخير تم بواسطة Aloha ; 20-09-2008 الساعة 10:12 PM
    __________________
    وفوق كل ذي علم عليم !..

  15. #15
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    61


    يعطيك العافية على اهتمامك

    عندي سؤال ثاني يبيله فهم دسم للتعابير القياسية

    كيف اقدر الغي الوسوم المتكررة مثلاً
    كود PHP:

    <font color="#FFFFFF"><font color="#FF0000">swalif</font><p><font color="#000080">soft</font></font
    إلى

    كود PHP:
    <font color="#FFFFFF">swalif<p>soft</font











ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض