الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التعامل مع ال Pattern و ال Matcher

بدأه mr.beshoy في 24 فبراير 2010 · 18 رد · 1,198 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مثال بسيط يوضح كيفية التعامل مع ال Pattern و ال Matcher فى لغتنا الحبيبة ( ال java ) :lol:

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TextFieldTest extends JFrame {

    private JPanel panel;
    private JTextField textField;
    private JButton press;

    public TextFieldTest() {
        panel = new JPanel(new FlowLayout());
        textField = new JTextField(10);
        press = new JButton("press");
        panel.add(textField);
        panel.add(press);
        getContentPane().add(panel);
        press.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                Pattern p = Pattern.compile("[a-zA-Z]");
                Matcher m = p.matcher(textField.getText());
                boolean find = m.find();
                if (find) {
                    textField.setText("");
                }
            }
        });
    }

    public static void main(String[] args) {
        TextFieldTest textFieldTest = new TextFieldTest();
        textFieldTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        textFieldTest.setSize(new Dimension(500, 600));
        textFieldTest.setLocationRelativeTo(null);
        textFieldTest.setVisible(true);
    }
}

و هذا لينك به شرح أكثر للتعامل معهم :

http://forum.mans-fci.info/viewtopic.php?f=7&t=5437

---------------

شكراً

تم تعديل هذه المشاركة بواسطة mr.beshoy في 24 فبراير 2010 في 07:04

2
#2

إيه الحلاوه دي يا بيشوي.

#3

شكرا يا يبشوي

و توضيحا لعمل البرنامج

اذا احتوت خانة الكتابة على اي حرف من A-Z او a-z

يتم تفريغ الخانات

اما اذا كان يحتوي على ارقام فقط فلا يتم تفريغ الخانة

دمتم سالمين

#4

لماذا أستخدم pattern و Matcher

ما رأيك أن توضح أكثر؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5

كان يمكن استعمال الطريقة matches الخاصة ب String

#6

لقد أخبرني شخص ما أن مشكلة ال regular Expressions أنها non-thread safe , هل أحد عنده فكره عن ذلك ؟

#7

ماذا تعتي بالضبط عندما تقول regular expression؟؟

إن لم أكن مخطئا، قمسألة thread-safe تطرح بالنسبة لل mutable classes، في حين أن String مثلا تعتبر immutable

#8

أقصد بال Regular Expression إستخدام دوالها مثل Pattern و Matcher

إنظر الروابط :

http://www.javamex.com/tutorials/regular_expressions/thread_safety.shtml

http://www.brokenbuild.com/blog/2007/03/19/java-threadsafety-again-this-time-regexes/

تم تعديل هذه المشاركة بواسطة {هويدي} في 24 فبراير 2010 في 22:47

#9

ال class Pattern

يوجد بداخله method تُسمى Compile() و هذه تأخذ نمط ال expression الذى تريده .

و يحتوى أيضاً على method تُسمى matcher() تلك تأخذ charSequence .

أما ال class Matcher يحتوى على method تُسمى find() لِنرى إذا ما كان ال charSequence بيكون matches مع ال patern أم لا

---------------------------------------------------------------------------------------------------------------

تعديلاً على المثال السابق : أضفنا جزئية الأرقام .

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TextFieldTest extends JFrame {

    private JPanel panel;
    private JTextField textField;
    private JButton press;
    private Matcher m;
    private Pattern patternChar, patternNum;

    public TextFieldTest() {
        panel = new JPanel(new FlowLayout());
        textField = new JTextField(10);
        press = new JButton("press");
        panel.add(textField);
        panel.add(press);
        getContentPane().add(panel);
        press.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                patternChar = Pattern.compile("[a-zA-Z]");
                patternNum = Pattern.compile("[0-9]");
                m = patternChar.matcher(textField.getText());
                m = patternNum.matcher(textField.getText());
                boolean findChar = m.find();
                boolean findNum = m.find();
                if (findChar || findNum) {
                    textField.setText("");
                }
            }
        });
    }

    public static void main(String[] args) {
        TextFieldTest textFieldTest = new TextFieldTest();
        textFieldTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        textFieldTest.setSize(new Dimension(500, 600));
        textFieldTest.setLocationRelativeTo(null);
        textFieldTest.setVisible(true);
    }
}

اقتباس
كان يمكن استعمال الطريقة matches الخاصة ب String

إذا أحببت أخ عصام أسرد لنا قطعة كود بسيطة :)

اقتباس

لقد أخبرني شخص ما أن مشكلة ال regular Expressions أنها non-thread safe , هل أحد عنده فكره عن ذلك ؟

لم اقرأ بعد فى هذه القضية ...من يعرف يُخبرنا ..

شكراً جزيلاً

#10

أخ بيشوي, إنظر الروابط التي وضعتها بالأعلي

#11

معلش يا مستر أنا لم اُلاحظ إلا بعد ردى

شكراً لك

#12

أخ هويدي أعتقد أن Thread unsafe

ليست مشكلة دائماً

هناك الكثير من الحزم packages في جافا تدخل تحت هذا النوع

منها swing و collection (باستثناء HashTable و Vector)

لاحظ أن عمليات synchronization المتكررة تؤدي إلى هبوط حاد في الأداء performance الخاص بالحزمة

لذا تجد أن الكثير من الحزم تضع هذه المهمة على عاتق المستخدم (المبرمج)

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#13

أظن أن هذه يستفاد منها لبناء المترجمات في مرحلة الـLexical Analysis والـSyntax Analysis , هل يوجد لها تطبيق آخر؟


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#14

بالتأكيد يا محمد الكثير من التطبيقات

التأكد من صحة المدخلات validation

البحث في نص معين search

احم احم

يبدو أني لا أعرف الكثير منهم :lol:

ويمكن أنه لا يوجد الكثير

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#15

يالله مشيها بس blush.gif , بس أقصد ان باقي التطبيقات ممكن الإكتفاء بالمقارنه التقليديه اللي نعرفها صح ولا لا؟

وين هذا الموضوع مانزل أيام ماكان عندي مشروع في مادة الكومبايلر , كانت بتفيدني كثييييييييييير


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#16

يتهيألك أنه يمكن الاكتفاء بالمقارنة التقليدية

هناك بعض عمليات الفحص تحتاج أكثر بكثير من مجرد مقارنة عادية

مثال

عملية فحص الملف إذا كان عبارة عن ملف xhtml

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#17

اها , بصراحه ماقد تعاملت مع هذا النوع من الملفات blush.gif


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#18

أنا آسف ما قصدت الملف نفسه

قصدت المحتوى

هل محتوى النص يمثل محتوى XHTML

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#19
أظن أن هذه يستفاد منها لبناء المترجمات في مرحلة الـLexical Analysis والـSyntax Analysis , هل يوجد لها تطبيق آخر؟

كما قال أستاذنا علاء تفيد فى موضوع ال validation و المقارنات و البحث فى نص عن جزء معين .

و تفيد طبعاً فى مواضيع ال compiler

----------------------------------------------------------

بالنسبة لملفات ال Xhtml لم أتطرق بعد لها بصراحة

شكراً

مواضيع مشابهة