28-07-19, 06:39 PM
الكود باختصار
انشأنا متغير من نوع WebRequest من ااجل الوصول إلى سورس كود الصفحة ، ولأن الــ WebRequest لا توجد بها خاصية للوصول الى السورس قمنا بتمرير الناتج من ذلك الرابط إلى المتغييرين التاليين HttpWebResponse و Stream
كل هذ من اجل الوصول الى سورس كود الصفحة
وبالإمكان الاستغناء عن الثلاثة السابقة باستخدام WebClient هذه توصلك إلى السورس مباشرة ولكن مع الاسف لا تدعم اللغة العربية فستجد أي حرف عربي تحول الى علامة استفهام
بعد ذلك انشأنا متغير R من اجل قراءة النص الذي تم الحصول عليه من RD
بعدها انشأن متغير نصي S وقمنا بقراءة النص من اوله الى آخرة R.ReadToEnd
هذه العبارة (\r|\n) تعني فواصل الاسطر وكما ترى قمنا باستبدالها بلا شيء لان فواصل الاسطر قد تعيق عملية البحث
ثم بعد ذلك
S = Regex.Replace(S, "\s+", Space(1))
قمنا باستبدال المسافات بمسافة واحدة فقط هذا الرمز \s يعني مسافة وعلمة الــ + تعني تكرار هذه المسافة ، لو كان هناك مسافتان او ثلاث او 10 سيتم حذفها واستبدالها بمسافه واحدة فقط وهذا كلة من اجل الوصول الى عملة بحث دقيقة في النص المستخلص
Dim M As MatchCollection
بعد ذلك قمنا بأنشاء المتغير M من أجل عملية البحث المتعدد النتائج في النص
M = Regex.Matches(S, "<meta\s*name=""description""\s*content=""(\d+,?\d+).+?
.+?)"".+dir=""ltr"">(.+?)</strong>")
هذه العبارة : "<meta\s*name="" موجودة في سورس كود الصفحة ماعدى \s* والتي تعني احتمال وجود مسافة و بالامكان حذفها واستبدالها بمسافة عادية
وكذلك هذه العبارة : description""\s*content=
الــ (\d+,?\d+)
تمثل المبالغ 1,500
ووضعنا خلف الفاصلة استفهام يعني ان الفاصلة اختيارية ان وجدها كان بها وان كان المبلغ بلا فاصلة فلا يتم تجاهلة
() القوسين الذي تم احاطة العددين بهما هو لحفظها في الذاكرة وهي التي ستمثل القروب الاول
بعد ذلك M(0).Groups(1).Value
طلبنا منه البحث عن أي شي يقع بعد العددين بهذا التعبير .+?: الى ان يصل الى النقطتين :
ولكن لو كان هناك في النص نقطتين أخرى سيتم الوصول اليها ولكن عندما وضعنا الاستفهام خلف النقطة فهذا يلزم البرنامج بالوقوف عند اول نقطتين (
يقابلها
بعد ذلك طلبنا منها ان يبحث عن أي شي بعد النقطتين بها التعبير (.+?) وايضا اتبعنا عملية التكرار بالاستفهام لكي يقف عن اول نتيجة بحث يجدها ...... وكذلك باقي الكود
ولكي تفهم الموضوع جيدا راجع الــ Regex وان شاء الله ستفهم ما اقصده بهذا الكلام
-----
آسف ان كان الشرح غير واضح
انشأنا متغير من نوع WebRequest من ااجل الوصول إلى سورس كود الصفحة ، ولأن الــ WebRequest لا توجد بها خاصية للوصول الى السورس قمنا بتمرير الناتج من ذلك الرابط إلى المتغييرين التاليين HttpWebResponse و Stream
كل هذ من اجل الوصول الى سورس كود الصفحة
وبالإمكان الاستغناء عن الثلاثة السابقة باستخدام WebClient هذه توصلك إلى السورس مباشرة ولكن مع الاسف لا تدعم اللغة العربية فستجد أي حرف عربي تحول الى علامة استفهام
بعد ذلك انشأنا متغير R من اجل قراءة النص الذي تم الحصول عليه من RD
بعدها انشأن متغير نصي S وقمنا بقراءة النص من اوله الى آخرة R.ReadToEnd
هذه العبارة (\r|\n) تعني فواصل الاسطر وكما ترى قمنا باستبدالها بلا شيء لان فواصل الاسطر قد تعيق عملية البحث
ثم بعد ذلك
S = Regex.Replace(S, "\s+", Space(1))
قمنا باستبدال المسافات بمسافة واحدة فقط هذا الرمز \s يعني مسافة وعلمة الــ + تعني تكرار هذه المسافة ، لو كان هناك مسافتان او ثلاث او 10 سيتم حذفها واستبدالها بمسافه واحدة فقط وهذا كلة من اجل الوصول الى عملة بحث دقيقة في النص المستخلص
Dim M As MatchCollection
بعد ذلك قمنا بأنشاء المتغير M من أجل عملية البحث المتعدد النتائج في النص
M = Regex.Matches(S, "<meta\s*name=""description""\s*content=""(\d+,?\d+).+?
.+?)"".+dir=""ltr"">(.+?)</strong>")هذه العبارة : "<meta\s*name="" موجودة في سورس كود الصفحة ماعدى \s* والتي تعني احتمال وجود مسافة و بالامكان حذفها واستبدالها بمسافة عادية
وكذلك هذه العبارة : description""\s*content=
الــ (\d+,?\d+)
تمثل المبالغ 1,500
ووضعنا خلف الفاصلة استفهام يعني ان الفاصلة اختيارية ان وجدها كان بها وان كان المبلغ بلا فاصلة فلا يتم تجاهلة
() القوسين الذي تم احاطة العددين بهما هو لحفظها في الذاكرة وهي التي ستمثل القروب الاول
بعد ذلك M(0).Groups(1).Value
طلبنا منه البحث عن أي شي يقع بعد العددين بهذا التعبير .+?: الى ان يصل الى النقطتين :
ولكن لو كان هناك في النص نقطتين أخرى سيتم الوصول اليها ولكن عندما وضعنا الاستفهام خلف النقطة فهذا يلزم البرنامج بالوقوف عند اول نقطتين (
يقابلهابعد ذلك طلبنا منها ان يبحث عن أي شي بعد النقطتين بها التعبير (.+?) وايضا اتبعنا عملية التكرار بالاستفهام لكي يقف عن اول نتيجة بحث يجدها ...... وكذلك باقي الكود
ولكي تفهم الموضوع جيدا راجع الــ Regex وان شاء الله ستفهم ما اقصده بهذا الكلام
-----
آسف ان كان الشرح غير واضح

