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

 

العودة   سوالف سوفت > قسم تطوير وبرمجة المواقع للمتقدمين > PHP
المدوّنات البحث مشاركات اليوم اجعل كافة المشاركات مقروءة

رد  
 
LinkBack أدوات الموضوع
عضو سوبر نشيط
تاريخ التسجيل: Apr 2006-
#1 (permalink)  
تمارين التعابير القياسية "Regular expressions"


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

سيكون هذا الموضوع سؤال و جواب ويعبر ايضا تمرين ﻻستخدام التعابير لتعم الفائدة للجميع وانا منهم ..

ويمكن ﻷي عضو طرح سؤال خاص بالتعابير القياسية وﻻ يخرج عن نطاقه

وﻻ يتم وضع سؤال قبل ان يتم اﻻجابة عن السؤال قبله

من ﻻ يعرف التعابير القياسية سيجد في هذا الرابط site:swalif.net/softs/swalif45 التعابير القياسية - بحث Google‏
جميع المواضيع المطروحة في هذا المنتدى الخاصة بموضوعنا

روابط ذات صلة :

ارســن :: ARCCN - الدرس العشرون: التعابير القياسيه
Regular expression - Wikipedia, the free encyclopedia

دوال التعامل مع التعابير القياسية
PHP: POSIX Regex - Manual
PHP: Manual Quick Reference
سأبدأ بأول سؤال

لدي input اريد ان يكون يقبل فقط تسع ارقام والرقم اﻷول ﻻزم يكون صفر

والجواب سيكون في ردي الموالي ...






عبد الواحد البشيري غير متواجد حالياً   قديم 21-05-2008, 10:57 PM
رد مع اقتباس
عضو سوبر نشيط
تاريخ التسجيل: Apr 2006-
#2 (permalink)  

الجواب :

كود PHP:
$text="062205820";
if(
preg_match("/[0]{1}[0-9]{8}$/",$text))
    {
    echo 
"الرقم صحيح";
    }
    else
    {
    echo 
"الرقم غير صحيح";
    } 
اﻷن سنطور الكود الذي وضعته

نريد ان يكون الرقم الذي بعد صفر اكبر من صفر يعني 1 2 3....9

ﻻننا في المغرب ﻻ يمكن ان يكون الرقم هكذا 002546982






عبد الواحد البشيري غير متواجد حالياً   قديم 21-05-2008, 11:00 PM
رد مع اقتباس
مشرف قسم PHP
تاريخ التسجيل: May 2007-
#3 (permalink)  

اقتباس:
المشاركة الأصلية كتبت بواسطة عبد الواحد البشيري مشاهدة المشاركة
الجواب :

كود PHP:
$text="062205820";
if(
preg_match("/[0]{1}[0-9]{8}$/",$text))
    {
    echo 
"الرقم صحيح";
    }
    else
    {
    echo 
"الرقم غير صحيح";
    } 
اﻷن سنطور الكود الذي وضعته

نريد ان يكون الرقم الذي بعد صفر اكبر من صفر يعني 1 2 3....9

ﻻننا في المغرب ﻻ يمكن ان يكون الرقم هكذا 002546982
عفواً ، إجابتك ليست دقيقة ، عليك تحديد نقطة البداية بـ ^ ..

كود PHP:
if(preg_match("/^[0]{1}[0-9]{8}$/",$text)) 
لأنه لو بقي كما كتبته أنت لجاز وضع أي رقم قبل الرقم في مثالك ..

التطوير:
كود PHP:
$text="062205820";
if (
preg_match("/^[0]{1}[1-9]{1}[0-9]{7}$/",$text)) {
 echo 
"الرقم صحيح";
} else {
 echo 
"الرقم غير صحيح";

تحياتي، أشرف السمهوري






__________________
[هل] سيتحقق الحلم؟
هذا ما ستخبرنا به الأيام :) ..
أشرف السمهوري غير متواجد حالياً   قديم 22-05-2008, 12:14 AM
رد مع اقتباس
عضو سوبر نشيط
تاريخ التسجيل: Apr 2006-
#4 (permalink)  

شكرا لك على اﻻضافة والتطوير
كنت قد وضعت ^ ﻻني اعرف اني اقوم بتحديد البداية وازلتها لسبب ﻻ اعرفه ولهذا وضعت الكود بدونها .. اشكرك

اﻷن لو سمحت او احد اﻻخوة وضع تمرين جديد






عبد الواحد البشيري غير متواجد حالياً   قديم 22-05-2008, 01:04 AM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2007-
#5 (permalink)  

كيف يمكن تفعيل الروابط في نص معين ؟

مثلاً لدي نص ..
كود:
google: http://www.google.com
yahoo: http://www.yahoo.com
كيف يمكن تفعيل الروابط فيه ليصبح ..
كود:
google: <a href="http://www.google.com">http://www.google.com</a>
yahoo: <a href="http://www.yahoo.com">http://www.yahoo.com</a>
لاحظو معي أن الروابط متنوعة ( http, ftp , ... ) ، أيضاً إذا كان الرابط طويلاً ( index.php?id=1&page=2&order=desc ) ، نريد تعبيراً قياسياً متكاملاً ..

بإنتظار حلولكم ..






dev11 غير متواجد حالياً   قديم 23-05-2008, 07:22 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2006-
#6 (permalink)  

اقتباس:
المشاركة الأصلية كتبت بواسطة dev11 مشاهدة المشاركة
كيف يمكن تفعيل الروابط في نص معين ؟

مثلاً لدي نص ..
كود:
google: http://www.google.com
yahoo: http://www.yahoo.com
كيف يمكن تفعيل الروابط فيه ليصبح ..
كود:
google: <a href="http://www.google.com">http://www.google.com</a>
yahoo: <a href="http://www.yahoo.com">http://www.yahoo.com</a>
لاحظو معي أن الروابط متنوعة ( http, ftp , ... ) ، أيضاً إذا كان الرابط طويلاً ( index.php?id=1&page=2&order=desc ) ، نريد تعبيراً قياسياً متكاملاً ..

بإنتظار حلولكم ..
السلام عليكم

هذا حل كتبته سريعاً لما فهمته من المطلوب

كود PHP:
<?php
$a
="ftp://www.google.com";
$x=preg_replace("/^(http|ftp):\/\/(www.)*[a-zA-Z0-9]+\.[a-zA-Z0-9]+([a-zA-Z0-9&=?]+)*$/","<a href='$a'>$a</a>",$a);
echo 
$x;
?>
و يمكن اضافة عدة اضافات له أيضاً






__________________
أحمد عبد الفتاح
www.servmix.com
المبيعات : info@servmix.com
لمراسلتي : engahmed@servmix.com

• ليس اليتيم الذى قد مات والده ... بل اليتيم يـتـيـم العلـم و الأدب •

Eng/ Ahmed غير متواجد حالياً   قديم 23-05-2008, 07:54 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2006-
#7 (permalink)  

موضوع جميل .
لم أصل بعد إلى هذه المرحلة !!
هذه أول مرة اقرأ فيها حول التعابير القياسية واستخداماتها
سأكون متابعة ومشاركة بإذن الله تعالى .

جزاكم الله خير الجزاء






__________________
100 صقر !!
يومياتي في تعلم php ..
أرحب بالمبتدئين لنتعلم معا والمحترفين ليقدموا النصح والتوجيه .
.
.
سبحان الله وبحمده عدد خلقه .. ورضا نفسه .. وزنة عرشه .. ومداد كلماته .
SaharRose غير متواجد حالياً   قديم 23-05-2008, 07:59 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2007-
#8 (permalink)  

حلك غير دقيق ، فهو لا يغطي جميع الروابط ، مثال إذا كان الرابط Google فإنه لايتم إعتباره كرابط ..

لدي حل ، لكنني أريد أن أرى حلولكم لكي أقارنها بما عندي






dev11 غير متواجد حالياً   قديم 24-05-2008, 08:26 PM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Jul 2003-
#9 (permalink)  

محاولة سريعة للتفاعل مع الموضوع :
كود PHP:
"/(http|ftp):\/\/(www.)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}\/*(([\w\W\.?&=]+)*)(\s*)/is" 
تمت تجربته على :

ملاحظة : تم فصل آخر الرابط بال \s لأنه اكيد اللينك سيكون بعده مسافة






__________________
النسخة الثانية من ابلود بلس قريبا جدا :
+ شريط مئوي لرفع الملفات
+ دعم اكثر من سيرفر لرفع الملفات Multi-Server
+ مكتبة ملفات مؤرشفة
Egyptechno غير متواجد حالياً   قديم 25-05-2008, 12:33 AM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2006-
#10 (permalink)  

اقتباس:
المشاركة الأصلية كتبت بواسطة dev11 مشاهدة المشاركة
حلك غير دقيق ، فهو لا يغطي جميع الروابط ، مثال إذا كان الرابط Google فإنه لايتم إعتباره كرابط ..

لدي حل ، لكنني أريد أن أرى حلولكم لكي أقارنها بما عندي
السلام عليكم . نعم أعلم انه ليس شامل جميع الروابط . قمت بكتابه فقط من اجل تحويل الروابط بشكل عام للشكل الذي طلبته بالأعلي .. عامة لن أضع حل أخر بما أن الأخ ايجيبتنكوا تفضل ووضع حل له و أعتقد انه ان شاء الله سيظبط مع جميع الروابط (لم أقم بتجربته <<< يغلب علي النوم )..

بانتظار أي أسئلة أخري ان شاء الله ، الموضوع أكثر من رائع و سيفيد جداً الجميع






__________________
أحمد عبد الفتاح
www.servmix.com
المبيعات : info@servmix.com
لمراسلتي : engahmed@servmix.com

• ليس اليتيم الذى قد مات والده ... بل اليتيم يـتـيـم العلـم و الأدب •

Eng/ Ahmed غير متواجد حالياً   قديم 25-05-2008, 01:57 AM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Jul 2003-
#11 (permalink)  

Eng/ Ahmed

يا باشا حل ايه وبتاع ايه ، انت الاصل يا باشا .. انا خدت الكود بتاعك وعدلت عليه فالسريع بس






__________________
النسخة الثانية من ابلود بلس قريبا جدا :
+ شريط مئوي لرفع الملفات
+ دعم اكثر من سيرفر لرفع الملفات Multi-Server
+ مكتبة ملفات مؤرشفة
Egyptechno غير متواجد حالياً   قديم 25-05-2008, 03:10 AM
رد مع اقتباس
مشرف قسم PHP
تاريخ التسجيل: May 2007-
#12 (permalink)  

تعديلي السريع:
كود:
/((http|ftp):\/\/[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\/*([\w\/\.\?&=]+)*)/is
تطبيق لعدة أمثلة وبعدة طرق :
كود PHP:
<?php
$str 
"http://www.google.com    this is Google
http://google.com    Google Also !!
http://google.com/?aaa&a=445as
http://g-o-o-gle.com/folder1/folder2/index.xml
http://my-sub-domain.google.com/folder1/folder2/index.xml
http://www2.google.info"
;

echo 
preg_replace("/((http|ftp):\/\/[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\/*([\w\/\.\?&=]+)*)/is"'<a href="\\1">\\1</a>'$str);
?>
تحياتي، أشرف السمهوري






__________________
[هل] سيتحقق الحلم؟
هذا ما ستخبرنا به الأيام :) ..
أشرف السمهوري غير متواجد حالياً   قديم 25-05-2008, 10:14 AM
رد مع اقتباس
مشرف قسم PHP
تاريخ التسجيل: May 2007-
#13 (permalink)  

تجربة جديدة ، لا أدري مدى صحتها لكن كلها تجارب واحتمالات ممكنة:
كود PHP:
<?php
$str 
'
Link1: http://www.google.com (FIRST)
Link2: http://google.com Google Also !!
Link3: http://google.com/?aaa&a=445as
Link4: http://g-o-o-gle.com/folder1/folder2/index.xml
Link5: http://my-sub-domain.google.com/folder1/folder2/index.xml
Link6: http://www2.google.info
Link7: http://www2.google.info/folder-1/my_ex_folder/file.php3
'
;
 
echo 
preg_replace("/((http|ftp):\/\/[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}([\S]*))/is"'<a href="\\1">\\1</a>'$str);
?>
تحياتي، أشرف السمهوري






__________________
[هل] سيتحقق الحلم؟
هذا ما ستخبرنا به الأيام :) ..
أشرف السمهوري غير متواجد حالياً   قديم 25-05-2008, 10:27 AM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2006-
#14 (permalink)  

اقتباس:
المشاركة الأصلية كتبت بواسطة أشرف السمهوري مشاهدة المشاركة
تجربة جديدة ، لا أدري مدى صحتها لكن كلها تجارب واحتمالات ممكنة:
كود PHP:
<?php
$str 
'
Link1: http://www.google.com (FIRST)
Link2: http://google.com Google Also !!
Link3: http://google.com/?aaa&a=445as
Link4: http://g-o-o-gle.com/folder1/folder2/index.xml
Link5: http://my-sub-domain.google.com/folder1/folder2/index.xml
Link6: http://www2.google.info
Link7: http://www2.google.info/folder-1/my_ex_folder/file.php3
'
;
 
echo 
preg_replace("/((http|ftp):\/\/[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}([\S]*))/is"'<a href="\\1">\\1</a>'$str);
?>
تحياتي، أشرف السمهوري
ده اللي كنت عامل حسابه و خايف منه . ان اشرف يدخل و يرد بالموضوع
مجموعة تعديلات ممتازه يأشرف . بارك الله فيك .

Egyptechno
الله يكرمك ياباشا . مانا عارف أني الأصل
الفكره اني رديت حسب المتطلبات اللي كانت مذكور بالشكل للرابط المطلوب برد dev11 مع اني اعلم انها لن تكون شامله لجميع الروابط . لكن فضلت وضعها هكذا و لو طلب المزيد كنت هرد بالتعديلات الأكثر . لكن أشرف انهي الاجابه حلاص ووضعها






__________________
أحمد عبد الفتاح
www.servmix.com
المبيعات : info@servmix.com
لمراسلتي : engahmed@servmix.com

• ليس اليتيم الذى قد مات والده ... بل اليتيم يـتـيـم العلـم و الأدب •

Eng/ Ahmed غير متواجد حالياً   قديم 25-05-2008, 10:33 AM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2007-
#15 (permalink)  

حلول رائعة ، لم أجربها لكن .. سأضع مالدي وسأقوم بالتجربة لاحقاً
كود PHP:
'[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]' 
هذا الحل وجدته هنا في سوالف ، وهو يفي بالغرض ..

سأقوم بالتجربة ولي عودة لاحقاً ..

اقتباس:
ملاحظة : تم فصل آخر الرابط بال \s لأنه اكيد اللينك سيكون بعده مسافة
ليس دائماً ، قد يكون الرابط في آخر فقرة ويكون متبوعاً مباشرة بنقطة

اقتباس:
قمت بكتابه فقط من اجل تحويل الروابط بشكل عام للشكل الذي طلبته بالأعلي
ياعزيزي .. ما أوضحته أننا نريد تعبيراً قياسياً متكاملاً أما ما وضعته أنا فما هو الا مثال على تنوع الروابط .






dev11 غير متواجد حالياً   قديم 25-05-2008, 04:12 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2006-
#16 (permalink)  

اقتباس:
المشاركة الأصلية كتبت بواسطة dev11 مشاهدة المشاركة
ياعزيزي .. ما أوضحته أننا نريد تعبيراً قياسياً متكاملاً أما ما وضعته أنا فما هو الا مثال على تنوع الروابط .
حسناً فهمت انا قصدك خطأ . المره القادمه هقرأ الطلب بتمعن و ليس بشكل سريع

اقتباس:
كود PHP:
'[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]' 
هذا الحل وجدته هنا في سوالف ، وهو يفي بالغرض ..
تمام . لكن من نظري انه غير دقيق أيضاً للأسف. رأيت هذا النمط من قبل لل regular expressions لكن لم أعمل به . قم بالتجربه بنفسك . معني هذا كمثال انه يمكن وضع بروتوكلات غريبه غير ال ftp و ال http كمثال اني أكتب رابط هكذا zx://ass.com او أني اكتب الموقع بهذا الشكل zxe://ccccccc . لذلك بنظري الحلول الموجوده حتي الان بالموضوع أفضل و أدق

هذا و الله أعلم ،






__________________
أحمد عبد الفتاح
www.servmix.com
المبيعات : info@servmix.com
لمراسلتي : engahmed@servmix.com

• ليس اليتيم الذى قد مات والده ... بل اليتيم يـتـيـم العلـم و الأدب •

Eng/ Ahmed غير متواجد حالياً   قديم 25-05-2008, 05:47 PM
رد مع اقتباس
عضو فعال
تاريخ التسجيل: Jul 2003-
#17 (permalink)  

إحم ..

لدي سؤال جديد

نريد تعبيرا قياسيا للتعرف على جميع الصور التي في رابط ما ..
مثلا
Google
يقوم التعبير القياسي بالتعرف على جميع الصور التي في هذه الصفحة وطبعا كيفية قراءة الصفحة ليست هي مشكلتنا الآن

كود PHP:
$str file_get_contents("http://www.google.com");
preg_match_all("/[PATTERN]/"$str$res); 






__________________
النسخة الثانية من ابلود بلس قريبا جدا :
+ شريط مئوي لرفع الملفات
+ دعم اكثر من سيرفر لرفع الملفات Multi-Server
+ مكتبة ملفات مؤرشفة
Egyptechno غير متواجد حالياً   قديم 25-05-2008, 06:56 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2006-
#18 (permalink)  

اقتباس:
المشاركة الأصلية كتبت بواسطة Egyptechno مشاهدة المشاركة
إحم ..

لدي سؤال جديد

نريد تعبيرا قياسيا للتعرف على جميع الصور التي في رابط ما ..
مثلا
Google
يقوم التعبير القياسي بالتعرف على جميع الصور التي في هذه الصفحة وطبعا كيفية قراءة الصفحة ليست هي مشكلتنا الآن

كود PHP:
$str file_get_contents("http://www.google.com");
preg_match_all("/[PATTERN]/"$str$res); 
ايه الأسئلة المعقدة دي

كتبت pattern بشكل سريع لمقارنة tags ال img . أتمني أن يكون المطلوب .. لم أجربه والله حتي لأني مضطر أخرج الان (حظكم دايماً اني بشوف المواضيع قبل ما أخرج بلحظات ) .. جربوه و بلغوني بالنتيجه <<< أهم شيء قبل أشرف ما يرجع






__________________
أحمد عبد الفتاح
www.servmix.com
المبيعات : info@servmix.com
لمراسلتي : engahmed@servmix.com

• ليس اليتيم الذى قد مات والده ... بل اليتيم يـتـيـم العلـم و الأدب •

Eng/ Ahmed غير متواجد حالياً   قديم 25-05-2008, 07:57 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2006-
#19 (permalink)  

ههههههههه حتي من استعجالي نسيت أكتب ال pattern !!
تفضل
كود PHP:
"/^<img src=('|\"){1}[\s]*[A-Za-z0-9-_.\/?&]+('|\"){1}[\s]*([a-zA-Z0-9\s=]+('|\"){1}[a-zA-Z0-9-_.\s\:"']*('|"){1})*[\s]*(\/)*>$/" 
أراكم ليلاً ،






__________________
أحمد عبد الفتاح
www.servmix.com
المبيعات : info@servmix.com
لمراسلتي : engahmed@servmix.com

• ليس اليتيم الذى قد مات والده ... بل اليتيم يـتـيـم العلـم و الأدب •

Eng/ Ahmed غير متواجد حالياً   قديم 25-05-2008, 07:58 PM
رد مع اقتباس
مشرف قسم PHP
تاريخ التسجيل: Apr 2002-
#20 (permalink)  

حسنا ما رايكم في تعبير ... يستخلص اوسمة html ويضعها في مصفوفه ثم يستخرج من كل وسم خصائصة وضعها في عنصر المصفوفه نفسه .
كود PHP:
<font color="blue" size="3">hello</font>
<
div style="color:red">hello div</div
المخرجات
كود PHP:
$arr[font][attr] = array('color'=>'blue','size'=>'3');
$arr[font][body] = 'hello';
$arr[div][attr] = array('style'=>'color:red');
$arr[div][body] = 'hello div'
كيف سيكون هذا التعبير ؟






__________________
I Love PHP (d4d@hotmail.com)
http://www.daif.net/
daif غير متواجد حالياً   قديم 25-05-2008, 09:23 PM
رد مع اقتباس
مشرف قسم PHP
تاريخ التسجيل: May 2007-
#21 (permalink)  

كود PHP:
<?php
 $html 
"
<font color=\"blue\" size=\"3\">hello</font>
<div style=\"color: red\">contents here</div>
 "
;
 
preg_match_all('/\<([A-Z][A-Z0-9]+)\s*(\s+.*)\>(.*)\<\/\1\>/i'$html$arr);
 
$tags = array();
 foreach (
$arr[1] as $key => $val) {
  
preg_match_all('/([A-Z0-9]+)\s*=\s*("|\'|)(.*)\2/iU'$arr[2][$key], $attrs);
  
$tags[$val]['attr'] = array();
  foreach (
$attrs[1] as $key2 => $val2) {
   
$tags[$val]['attr'][$val2] = $attrs[3][$key2];
  }
  
$tags[$val]['body'] = $arr[3][$key];
 }
 
print_r($tags);
?>
مجرد محاولة باستخدام عبارتين منتظمتين






__________________
[هل] سيتحقق الحلم؟
هذا ما ستخبرنا به الأيام :) ..
أشرف السمهوري غير متواجد حالياً   قديم 26-05-2008, 12:41 AM
رد مع اقتباس
مشرف قسم PHP
تاريخ التسجيل: Apr 2002-
#22 (permalink)  

- ماذا لو كان الوسم لا ينتهي بمثله ... أقصد مثل <hr /> - <br />
- لماذا وضعت U في التعبير الثاني + لماذا ايضا لم تضعه في التعبير الاول ؟
- ايضا لم افهم لماذا وضعت [A-Z][A-Z0-9] في الاستعلام الاول ولم يكن هكذا فقط [A-Z]+






__________________
I Love PHP (d4d@hotmail.com)
http://www.daif.net/
daif غير متواجد حالياً   قديم 26-05-2008, 01:35 AM
رد مع اقتباس
مشرف قسم PHP
تاريخ التسجيل: May 2007-
#23 (permalink)  

اقتباس:
- ماذا لو كان الوسم لا ينتهي بمثله ... أقصد مثل <hr /> - <br />
كنت سأحاول تضمينه لو أنك قلت xhtml ، كود html أصعب للاكتشاف ، ومع ذلك يمكن بالطبع ، فلا شيء مستحيل .. سأحاول مالم يحاول الأعضاء اليوم إن شاء الله إذا كان في وقت ..

اقتباس:
- لماذا وضعت U في التعبير الثاني + لماذا ايضا لم تضعه في التعبير الاول ؟
التعبير الثاني إن لم أضع فيه U ستطغو الخاصية الأولى على جميع الخواص وتعتبر عنصراً واحداً مطابقاً للـ pattern .. بهذه الطريقة، سيقف عند أول إشارة مطابقة للأولى بدلاً من أن يتابع الإمساك ببقية النص ..

التعبير الأول ، ليس من الضروري أن يكون " طماعاً " أو Greedy .. فكل ما بين الوسمين يعتبر تابعاً لهما ..

اقتباس:
- ايضا لم افهم لماذا وضعت [A-Z][A-Z0-9] في الاستعلام الاول ولم يكن هكذا فقط [A-Z]+
لا يمكن أن يكون [A-Z]+ ، حيث أن هناك بعض الوسوم تحتوي على أرقام ، مثل h1 وغيره ، وكان بالإمكان أن يكون [A-Z0-9]+ فقط .. لكن حتى نضمن أن الوسم يبدأ بحرف ، وليس برقم ..

أمر آخر

الكود الذي طرحته في الأعلى لا يدعم Nested Tags ، أو الوسوم المتداخلة ، وبصراحة لم أتوصل لطريقة عملية لدعمها ، يمكن دعمها بطرق مرهقة برمجياً ، ومرهقة للسيرفر كذلك .. إذا استطعت الوصول إلى طريقة مناسبة سأقوم بإضافتها إن شاء الله ، وفي انتظار تعديلاتكم وإضافاتكم كذلك ..

تحياتي، أشرف السمهوري






__________________
[هل] سيتحقق الحلم؟
هذا ما ستخبرنا به الأيام :) ..
أشرف السمهوري غير متواجد حالياً   قديم 26-05-2008, 08:55 AM
رد مع اقتباس
مشرف قسم PHP
تاريخ التسجيل: May 2007-
#24 (permalink)  

في الحقيقة أمر مربك ههه

قمت بإضافة U إلى التعبير الأول حتى نتمكن من وضع أكثر من تاج بنفس الاسم .. وقمت بإصلاح بعض المشاكل ، وكذلك جعلت كل tag له مصفوفة بداخلها نتائجها ، حتى لا تضارب الوسوم المتشابهة بالاسم في نفس المصفوفة ..

التعديل:
كود PHP:
<?php
 $html 
"
<font color=\"blue\" size=\"3\"></font>
<div style=\"color: red\">contents here</div>
 "
;
 
preg_match_all('/\<([A-Z][A-Z0-9]+)\s*(.*)\>(.*)\<\/\1\>/isU'$html$arr);
 
$tags = array();
 foreach (
$arr[1] as $key => $val) {
  
preg_match_all('/([A-Z0-9]+)\s*=\s*("|\'|)(.*)\2/iU'$arr[2][$key], $attrs);
  
$attrs_list = array();
  foreach (
$attrs[1] as $key2 => $val2) {
   
$attrs_list[$val2] = $attrs[3][$key2];
  }
  
$tags[$val][] = array('attr' => $attrs_list'body' => $arr[3][$key]);
 }
 
print_r($tags);
?>
فعلاً أمر مربك ، ما زال الكود غير مؤهل للعمل بالشكل الكامل ..

تحياتي، أشرف السمهوري






__________________
[هل] سيتحقق الحلم؟
هذا ما ستخبرنا به الأيام :) ..
أشرف السمهوري غير متواجد حالياً   قديم 26-05-2008, 09:30 AM
رد مع اقتباس
مشرف قسم PHP
تاريخ التسجيل: Apr 2002-
#25 (permalink)