السلام عليكم
اخواني واجهتني مشكلة في تحديد بلد المستخدم الذي يستعمل برنامجي عن طريق الكود
قرأت عن هذا الموضوع ووجدته عن طريق استخدام ip address وعن طريق استخراج رقم منه واستخدام قاعدة بيانات واستخدام الرقم في تحديد البلد فلكل بلد ارقام معينه ... ارجوا ممن لديه خبره او فكره او اي معلومه في هذا الرد ومساعدتني واكون لكم مشكورا
اخي الطالب هل ممكن شرح كيف عمل الباترن هذا
اطلعت على مصدر الصفحة ولم اجد علامة يساوي=
PHP كود :
<li>Country : Saudi Arabia <img src="/img/flags/sa.gif"/></li>
سلام
بصراحه لقيتها جاهزه ومعرفتي فيها بسيطه
وهذا شرح بسيط للباترن
كود :
(?<=Country :).+?(?=<)
هذا الباترن بياخذ قيمه بين (بدايه) و(نهايه) محدده بالاقواس
البدايه هي
يقول حدد من ما بعد النص التالي
وامر (ما بعد) هو
وهنا عرفنا مكان بدايت المؤشر
النهايه هي
حدد من ما قبل النص التالي وهنا فقط حرف
وامر (ما قبل) هو
بقي الجزء اللي بينهم وهو
لكنها تحتوي حاجتين
الاولى
والثانيه
الاولى
تعني ان (.) هي اي حرف و (+) تعني مكرر مره او اكثر
ومع بعضهم تعني اي حرف مكرر مره او اكثر
وممكن نستخدم (*) بدل (+) تعطي نفس النتيجه
ولكن النجمه معناها سواء لقيت اي حرف سواء مكرر اولا او ما لقيت اي حرف
الثانيه
هي (؟) ووجوده قبل النهايه تعني هنا سوف يتوقف المؤشر عند اول مطابقه لل (النهايه)
وكما وضحنا ان النهايه هي البحث عن الحرف (>)
يعني يتوقف عند اول حرف (>) يلاقيها
والى هنا عرفنا مكان مؤشر النهايه
يمكن تتلخبط بسبب وجود (>) داخل قوس (البدايه) وقوس (النهايه)
لكانه في قوس (البدايه) كانت (جزء من امر)
وفي قوس (النهايه) كان (حرف)
المراجع:
http://vb4arb.com/vb/thread-467.html?highlight=regex
http://files.books.elebda3.net/elebda3.net-5647.pdf
http://stackoverflow.com/questions/10804...d-in-regex
http://www.rexegg.com/regex-quickstart.html
يعني جوابا على سؤالك كانت العلامه = جزء من امر وليست حرفا
اعذرني اذا ما فهمت عليا لان شرحي مش ولا بد
موفقين
بارك الله فيك..كفيت ووفيت.
اهم نقطة الفرق بين < (كحرف او كامر) يستخدمه الـ Regex
اتضح الغموض ولله الحمد.
حاولت استخدم الطريقة المختصرة ولم اعرف
PHP كود :
<div class="mapcat">Country:</div>
<div class="mapvalue">Saudi Arabia</div>
اقصد الباترن لم اتمكن من صياغته بشكل صحيح .
ياترى كيف سيكون لهذا النص.
http://ip-address-lookup-v4.com/
سلام
لان معرفتي في الباترن بسيطه
اظطررت للتخلص من تعدد الاسطر بحذف vbnewline لاستطيع حلها
كود :
Replace(vbNewLine, "")
ثم تطبيق الباترن
كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(IPCountry)
End Sub
Private Function IPCountry() As String
On Error Resume Next
Dim src As String = New Net.WebClient().DownloadString("http://ip-address-lookup-v4.com/")
Return System.Text.RegularExpressions.Regex.Match(src.Replace(vbNewLine, ""), "(?<=Country:</div>?\s+<div class=""mapvalue"">).+?(?=<)").Value.Trim
End Function
الجديد في هذا الباترن هنا s\ وتعي المسافه ووضع + وتعني التكرار
لانه حيكون فيه تقريبا 20 مسافات في وسط النص بعد حذف vbnewline
ملاحظه:
هذا الموقع ip-address-lookup-v4.com اعطاني romania من اني في السعوديه - طبعا حسب الايبي اللي انا شابك فيه حاليا
هذا الموقع متاخر في تحديث بيناته في قاعدت بياناته لهذا قد يعطيك اسم البلد قديم
لان الاي بي احيانا يعطي لشخص اخر او شركه اخرى في بلد اخر
لكن في الموقع ipinfodb.com اعطاتي saudi arabia - طبعا حسب الايبي اللي انا شابك فيه حاليا
يعني الدقه تعتمد على سرعت تحديث قاعدت بيانات الموقع اللي يقدم الخدمه
موفقين
ماشاء الله هذا الحل.
بالنسبة لي اضطررت لوضع الجملة الاولى كاملة.