النتائج 1 إلى 11 من 11

الموضوع: هل يمكن إستخدام التعبيرات القياسية مع اللغة العربية ؟

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

    Question هل يمكن إستخدام التعبيرات القياسية مع اللغة العربية ؟



    السلام عليكم ورحمه الله وبركاته ,

    هل يمكن إستخدام التعبيرات القياسية Regular Expressions مع اللغة العربية ؟


    قمت بتجربة التالي :
    كود PHP:
    $string="السلام عليكم";
    $cook preg_match_all('%\b([\x{0621}-\x{064A}]{6}\b)%u',$string,$mat);

    print_r($mat); 
    لم تظهر النتيجة ( المفترض ان تكون جميع الكلمات التي تتكون من 6 أحرف )
    ولكن مع :
    كود PHP:
    $string="السلام عليكم Hi man";
    $cook preg_match_all('%([\x{0621}-\x{064A}]+)%u',$string,$mat);

    print_r($mat); 
    فقد نجحت في تصفية النص من الكلمات الغير عربية ( او التي ليست بين 0621 و 064A بترميز اليونيكود)

    والنتيجة كانت :
    كود HTML:
    Array
    (
        [0] => Array
            (
                [0] => السلام
                [1] => عليكم
            )
    
        [1] => Array
            (
                [0] => السلام
                [1] => عليكم
            )
    
    )
    ويمكنني تعديل السؤال : إلي أي مدى يمكن ان تتعامل التعبيرات القياسية مع اللغة العربية .. وهل من حل لهذا الموضوع ؟





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


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


    توصلت للحل وهو بدون إستخدام حد الكلمات \b او Word Boundary
    لأنها تعتبر اي رمز من \w او [a-zA-Z0-9_] كحد للكلمة , وليست من ضمنها الحروف من اللغات الأخري

    فالحل أصبح :
    كود PHP:
    $string="السلام عليكم Hi man";
    $cook preg_match_all('%[\x{0621}-\x{064A}]{6}%u',$string,$mat);

    print_r($mat); 
    والنتيجة :
    كود HTML:
    Array
    (
        [0] => Array
            (
                [0] => السلام
            )
    
    
    
    )
    ولم تظهر كلمة "عليكم" , لأنها من خمسة حروف

    ويظل السؤال : إلي أي مدى تتعامل التعبيرات القياسية مع اللغة العربية ؟ وهل واجه أحد مشاكل معها؟





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

  3. #3


    يا أخي كلها مشاكل وليست مشكلة واحدة

    أريد أخذ نص من حقل وتفتيته لجمل كل سطر يكون عنصر في مصفوفة
    كنت استخدم \w
    وكانت تعمل علي الويندوز بشكل ممتاز سواء أكانت الحروف عربي أو غيرها

    ولكن بمجرد ان ركبته علي السيرفر وجدته يأتي بفراغات لو كتبت عربي !!

    هنا علمت انه يجب أن أضع في الشرط العربي
    وضعت من أ إلي ي
    ولكنه لا يأتي ببعض الحروف

    وطريقتك تلزمنا ان يكون ترميز الملف utf-8 كما أنني أتسائل
    ماذا لو أستخدم السكربت شخص ياباني أو صيني !!

    أريد أخذ نص من حقل إدخال text
    وجعل كل سطر فيه علي حدي في عناصر مصفوفة
    هل من حل غير التعابير ؟





    __________________
    السيف أصدق أنباء من الكتب

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


    يا أخي كلها مشاكل وليست مشكلة واحدة

    أريد أخذ نص من حقل وتفتيته لجمل كل سطر يكون عنصر في مصفوفة
    كنت استخدم \w
    وكانت تعمل علي الويندوز بشكل ممتاز سواء أكانت الحروف عربي أو غيرها

    ولكن بمجرد ان ركبته علي السيرفر وجدته يأتي بفراغات لو كتبت عربي !!

    هنا علمت انه يجب أن أضع في الشرط العربي
    وضعت من أ إلي ي
    ولكنه لا يأتي ببعض الحروف

    وطريقتك تلزمنا ان يكون ترميز الملف utf-8 كما أنني أتسائل
    ماذا لو أستخدم السكربت شخص ياباني أو صيني !!

    أريد أخذ نص من حقل إدخال text
    وجعل كل سطر فيه علي حدي في عناصر مصفوفة
    هل من حل غير التعابير ؟
    اليونيكود فيه جميع اللغات الحية وبعض اللغات الميتة ايضا

    ولكن كيف أخي تريد كل سطر في عنصر مصفوفه ؟؟
    أريد السؤال أكثر وضوحا لكي أستطيع مساعدتك ...

    وأعتقد ان المشكلة ممكن تحل عن طريق دوال Strings او دوال المصفوفات دون الحاجه الي التعبيرات القياسية لأنها تسبب حمل زائد علي التطبيق انت في غني عنه





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

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


    أعتقد أن هذا ماتقصده ,,
    كود PHP:
    echo "<br><p align='right' dir='rtl'>";
    $string 'شبكة محيط الإخبارية
    منتدي سوالف دوت نت
    موقع ترايدنت
    محرك بحث جووجل
    موقع عمرو خالد'
    ;
    $array explode("\r\n",$string);
    foreach(
    $array as $k=>$v)
    {
        echo 
    $k.' هو: '.$v.'<br>';


    النتيجة :


    0 هو: شبكة محيط الإخبارية
    1 هو: منتدي سوالف دوت نت
    2 هو: موقع ترايدنت
    3 هو: محرك بحث جووجل
    4 هو: موقع عمرو خالد



    رمز نهاية السطر في ويندوز هو \r\n وفي اليونكس ( االلي هوا السيرفر كما تحب ان تقول ) هو \n فقط ,, فأنتبه أخي الي هذا الإختلاف .





    التعديل الأخير تم بواسطة Aloha ; 07-09-2008 الساعة 06:27 AM سبب آخر: اضافة عناصر اكثر
    __________________
    وفوق كل ذي علم عليم !..

  6. #6


    نعم أخي أعرف بخصوص \r\n
    ولك جزيل الشكر





    __________________
    السيف أصدق أنباء من الكتب

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


    انحلت مشكلتك يا أخي ؟





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

  8. #8


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

    ولك جزيل الشكر





    __________________
    السيف أصدق أنباء من الكتب

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


    عفوا اخي ,
    و أخبرني لاحقا إلي أين وصلت في موضوع اللغة العربية :d





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

  10. #10


    المشكلة ليست مع العربية بشكل خاص أخي

    مثلا لو لدي سكربت سيتم إستخدامه من الكثير من اللغات
    هل هناك تعبير قياسي واحد يريحني ويستخدم كل المحارف

    مثلا
    \w تعني كل الحروف الإنجليزية و _
    لما لا تشمل البقية
    ولما في الويندوز شملت العربية ( هل لأن العربية معرفة علي الحاسوب مثلاً )





    __________________
    السيف أصدق أنباء من الكتب

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


    إن كنت تستخدم ترميز Windows-1256‎ فيمكنك إستخدام التعابير النظامية بشكل إعتيادي تماما مع التنبه إلى أن ‎\w تشير إلى الأحرف الإنجليزية فقط أو بصيغة أخرى هي ترمز إلى المجموعة ‎[A-Za-z_]‎

    من جهة أخرى إن كنت تتعامل مع نصوص عربية بترميز UTF-‎8 فإن الأمور تزداد تعقيدا نظرا لأن كل حرف عربي يخزن في بايتين، في حين تبقى الأحرف الإنجليزية مخزنة في بايت وحيد أغلب الأوقات، وهذا يؤثر على وظيفة الرموز ‎? + {n,m}‎ وهو ما يخلق كثيرا من الإرباك، لذا أنصح بشدة أن يتم تحويل الترميز بداية إلى Windows-1256‎ ومن ثم تطبيق التعابير النظامية المرغوبة والعودة بعدها إلى الترميز الأصلي إن كان لذلك داعي.

    يمكنك الإستعانة بمكتبة PHP واللغة العربية لإجراء عمليات التحويل فيما بين مجموعات المحارف العربية بيسر وسهولة:

    PHP & Arabic Language

    أخيرا تجدر الإشارة إلى أن الإصدار السادس من لغة PHP يعد بأن يدعم مجموعة المحارف العالمية الموحدة UTF-8‎ بشكل شفاف، وبذلك ينعدم أساس المشكلة.










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

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

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