tìm hiểu regular expression trong java – Tài liệu text

tìm hiểu regular expression trong java

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.51 MB, 38 trang )

TÌM HIỂU
REGULAR
EXPRESSION
TRONG JAVA
Thành viên nhóm:
1.Đặng Quang Hải: 081246T
2.Nguyễn Hoàng Dũng: 081238T
GVHD:Phan Văn Sim Anh
MỤC LỤC
1. Đặt vấn đề
2. Khái niệm Regular Expression là gì? Vai
trò của nó?
3. API là gì? API của biểu thức chính quy?
4. Một số phương thức của lớp Pattern
5. Một số phương thức của lớp Matcher
6. Cú pháp mẫu
7. Ví dụ
1. Đặt vấn đề
Trong các ứng dụng java cần thực hiện và
thao tác với các chuỗi, các lớp StringTokenizer
và String được sử dụng rất nhiều, việc này làm
phức tạp code và trở thành cơn ác mộng đối
với việc bảo trì.
Thường thì các ứng dụng java sẽ tìm kiếm sự
xuất hiện của một ký tự hay một dấu hiệu
(token) cụ thể nào đó trong một String, sau đó
tìm 1 chuỗi bao nó và rồi kiểm tra tính hợp lệ
của chuỗi được tách ra.
VD: Để xác định tính hợp lệ của một địa
chỉ email, ta có thể kiểm tra sự xuất hiện
của dấu ‘@’ và sau đó là một hay nhiều

dấu ‘.’, việc đó có thể được thực hiện như
sau:
1. Đặt vấn đề (tt)
String str = ;
int indexofAtchar = str.indexof(“@”);
if(indexofAtchar > 0)
{
int indexofDotchar = str.indexof(“.”,indexofAtchar);
if(indexofDotchar > 0)
{
system.out.println(“email hop le!”);
}
else
System.out.println(“email ko hop le”+”ko tim thay ‘.’ sau ‘@’”);
else
System.out.println(“email ko hop le ”+”ko tim thay ky tu ‘@’”);
1. Đặt vấn đề (tt)
Kết quả của đoạn code này là: email hop le!
Vậy có cách nào ngắn hơn để giải quyết bài
toán dạng này không?
Câu trả lời là: từ JDK 1.4 trở lên có hỗ trợ
regular expression trong gói Java.util.regex việc sử
dụng gói này và các lớp hỗ trợ cho việc tìm kiếm
và thao tác trên chuỗi trở nên đơn giản hơn rất
nhiều. Nó giúp giảm bớt áp lực phải cố gắng và
thêm đó là cải thiện đáng kề việc bảo trì.
1. Đặt vấn đề (tt)
a) Khái niệm Regular Expression:
Regular Expression hay còn gọi là biểu thức
chính quy là một chuỗi miêu tả một bộ các chuỗi

khác nhau, theo những quy tắc cú pháp nhất định.
Hay nói cách khác Regular Expression là 1 cái
khuôn được tạo ra để so khớp với 1 hay nhiều ký
tự đầu vào để kiểm tra tính hợp lệ của nó, tìm
kiếm sự xuất hiện của nó trong chuỗi khác.
2. Regular Expression
Regular Expression là gì, vai trò của nó trong các ứng dụng Java???
b) Vai trò của Regular Expression (regex) trong
các ứng dụng Java

Phân tích cú pháp

Xác định tính hợp lệ của dữ liệu

Xử lý chuỗi

Tách dữ liệu và tạo các báo cáo
Do đó việc nắm vững regex sẽ giúp bạn tiết
kiệm thời gian và công sức trong việc thao tác và
trích dẫn văn bản trên máy tính đặc biệt là trong
các ứng dụng của Java.
2. Regular Expression (tt)
API là gì? API của biểu thức chính quy?
a) API (Application Programming Interface)
Là một giao diện mà một hệ thống máy
tính hay ứng dụng cung cấp cho phép các yêu
cầu dịch vụ có thể được tạo ra từ các chương
trình máy tính khác, và/hoặc cho phép dữ liệu
có thể được trao đổi qua lại giữa chúng. Chẳng
hạn một chương trình máy tính có thể dùng các

hàm API của hệ điều hành để xin cấp phát bộ
nhớ và truy xuất tập tin.
3. API
Nhiều loại hệ thống và ứng dụng hiện thực
API như các hệ thống đồ họa, cơ sỡ dữ liệu, dịch
vụ web.
Đây là phần mềm hệ thống cung cấp đầy
đủ các chức năng và các tài nguyên mà các lập
trình viên có thể lấy ra và từ đó tạo nên các tính
năng giao tiếp người – máy: như các trình đơn
kéo xuống, hộp thoại giúp tiết kiệm được
nhiều thời gian.
3. API (tt)
b) API của biểu thức chính quy:
API của biểu thức chính quy trong ngôn
ngữ Java gồm có ba lớp cốt lõi mà bạn sử dụng
hầu như mọi lúc:
Pattern : mô tả một mẫu chuỗi nhất định
Matcher : Kiểm tra một chuỗi ký tự xem nó
có khớp với mẫu ko?
PatternSyntaxException: để báo cho bạn
biết rằng có một số thứ ko thể chấp nhận được
với mẫu mà bạn đã thử định nghĩa.
3. API (tt)
a) Pattern.compile():
Biên dịch biểu thức trong Pattern
VD: Pattern pat = Pattern.compile(“cats.*dogs”);

Matcher matcher = pat.matcher(“cats and dogs”);
boolean flag = matcher.matches();

Chú ý: chúng ta cũng có thể biên dịch pattern sử
dụng các cờ đặc biệt.
4. Pattern
Một số phương thức cơ bản của lớp Pattern
Cú pháp: static Pattern compile(String regex,
int flags)
VD: Pattern pattern =
pattern.compile(“.*http://.*”,CASE_INSENSITIVE
);
Cờ được sử dụng ở trên làm cho pattern bỏ
qua một số trường khi kết hợp văn bản
b) matches():
Kiểm tra chuỗi đầu vào có đúng với biểu thức
trong pattern hay ko?
4. Pattern (tt)
VD: String text = “this is the text to be
searched”+”forn occurrences of the pattern”;
Pattern pattern = Pattern.compile(“.*is.*”);
boolean matches =
Pattern.matches(pattern,text);
System.out.println(“matches = ”+matches);
Giải thích: ví dụ này tìm kiếm chuỗi ở trong
biến text cho sự xuất hiện của từ ‘is’, cho phép
ko hoặc nhiều ký tự trước và sau từ khóa,
4. Pattern (tt)
c) pattern.matcher();
Tạo ra một đối tượng thuộc lớp Matcher
từ lớp pattern
VD: Matcher matcher = Pattern.matcher(text);
Lớp Matcher dùng để thực hiện những

việc như kiểm tra và tìm kiếm
d) Pattern.split():
Tách chuỗi thành các chuỗi nhỏ phương
thức này có thể tách đoạn văn bản(chuỗi) thành
những đoạn nhỏ vào cho mãng chuỗi, sử dụng
ký hiệu tách
4. Pattern (tt)
VD:String text =“A sep text with sep many separator”;
String patternString = “sep”;
Pattern pattern = pattern.compile(patternString);
String split = Patter.split(text);
System.out.println(“split.lenght”+split.lenght);
for(String element : Split)
{
System.out.println(“element = ”+element);
}
4. Pattern (tt)
Giải thích: Ví dụ này sẽ tách đoạn văn bản trong biến
text thành 5 dãy strings riêng biệt và chúng sẽ được
nạp vào mảng String
e) pattern.pattern()
Phương thức này chỉ đơn giản trả về một pattern khi
pattern được biên dịch
VD:String patternString = “sep”;
Pattern pattern =
Pattern.compile(patternString);
String pattern2 = Pattern.pattern();
Trong ví dụ này thì biến pattern2 sẽ chứa cả giá trị
sep
4. Pattern (tt)

a) Tạo một Matcher();
Việc tạo ra một Matcher được thực hiện bởi
phương thức matcher() của lớp Pattern
VD:Matcher matcher = Pattern.matcher(text);
b) Phương thức matches();
Lớp Matcher cung cấp phương thức
matches() để kiểm tra sự giống nhau chính xác.
=>Cụ thể: cố gắng tìm kiếm dãy đầu vào dựa trên
khuôn mẫu Method này chỉ thành công nếu toàn
bộ dãy ký tự đầu vào là giống nhau hoàn toàn.
5. Matcher
Một số phương thức cơ bản của lớp Matcher
Cú Pháp:boolean matches = matcher.matches();
VD:import java.util.regex;
import Java.until.*;
Public class exactmatch
{
public static void main(String args[])
{
Pattern pat= Pattern.compile(“cats.*dogs”);
Matcher matcher = pat.matcher(“cats and dogs”);
boolean flag = Matcher.matches();//true
Pattern pat2 = Pattern.compile(“house.+family”);
Matcher matcher2 = pat2.matcher(“housefamily”);
boolean flag2 = matcher2.matches();//false
}
}
5. Matcher (tt)
Chú ý: bạn ko thể sử dụng phương thức này để tìm
kiếm 1 biểu thức chính quy xuất hiện nhiều lần trong 1

text.Để làm điều này bạn có cần sử dụng phương thức
find() ,end()
c) Phương thức lookingAt()
Tìm kiếm 1 phần
Cú Pháp: boolean lookingAt();
Thử tìm kiếm chuỗi đầu vào, bắt đầu dựa trên khuôn
mẫu. Giống như phương thức matches(), phương thức
luôn bắt đầu từ đầu của chuỗi đầu vào nhưng ko giống
như phương thức matches() nó ko đòi hỏi toàn bộ chuỗi
đầu vào phải giống.
5. Matcher (tt)
d) Phương thức find()
Tìm kiếm 1 phần
Thử tìm kiếm chuỗi tiếp theo của chuỗi
đầu vào phù hợp vời chuỗi mẫu, phương thức
này bắt đầu từ đầu chuỗi đầu vào hoặc tiếp nối
ở vị trí tìm kiếm tiếp theo sau một kết quả tìm
kiếm thành công
find() đặc biệt hữu dụng khi bạn quan tâm
đến tất cả các chuỗi con trong chuỗi đầu vào
phù hợp với khuôn mẫu được cung cấp
5. Matcher (tt)
VD:Pattern pat = Pattern.compile(“john”);
Matcher matcher = pat.matcher(“Hello,I am john parker”);
Boolean flag = matcher.find();//true
Boolean flag2 = matcher.matches();//false
Pattern pat2 = Pattern.compile(“john”);
Matcher matcher3 = pat2.matcher(“john parker is my name”);
boolean flag3 = matches.lookingAt();//true
boolean flag4 = matches.matches();//false vì ko được có thêm

ký tự trước và sau biểu thức

5. Matcher (tt)
e) Phương thức Start() và end()
Trả về chỉ số đầu và cuối của biểu
thức chính quy trong 1 đoạn khi được tìm
thấy, nó thường kết hợp với hàm find()
tìm chuỗi con trong chuỗi cha và muốn
xuất ra vị trí đầu và vị trí cuối.
5. Matcher (tt)
VD: String text = “this is the text which is to be
seareched”+”for occurrences of the the word”;
String patternString = “is”;
Pattern pattern = pattern.compile(patternString);
Matcher matcher = pattern.matcher(text);
Int count = 0;
While(matcher.find())
{
count ++;
System.out.println(“found:”+count+”:”+matcher.Start()
+”-”+matcher.end());
}
5. Matcher (tt)
Kết quả:
found 1: 1:2 – 4
found 2: 2:5- 7
Found 3:23 – 25
found 4:70 – 72
5. Matcher (tt)

dấu ‘.’, việc đó có thể được thực hiện nhưsau:1. Đặt vấn đề (tt)String str = ;int indexofAtchar = str.indexof(“@”);if(indexofAtchar > 0)int indexofDotchar = str.indexof(“.”,indexofAtchar);if(indexofDotchar > 0)system.out.println(“email hop le!”);elseSystem.out.println(“email ko hop le”+”ko tim thay ‘.’ sau ‘@’”);elseSystem.out.println(“email ko hop le ”+”ko tim thay ky tu ‘@’”);1. Đặt vấn đề (tt)Kết quả của đoạn code này là: email hop le!Vậy có cách nào ngắn hơn để giải quyết bàitoán dạng này không?Câu trả lời là: từ JDK 1.4 trở lên có hỗ trợregular expression trong gói Java.util.regex việc sửdụng gói này và các lớp hỗ trợ cho việc tìm kiếmvà thao tác trên chuỗi trở nên đơn giản hơn rấtnhiều. Nó giúp giảm bớt áp lực phải cố gắng vàthêm đó là cải thiện đáng kề việc bảo trì.1. Đặt vấn đề (tt)a) Khái niệm Regular Expression:Regular Expression hay còn gọi là biểu thứcchính quy là một chuỗi miêu tả một bộ các chuỗikhác nhau, theo những quy tắc cú pháp nhất định.Hay nói cách khác Regular Expression là 1 cáikhuôn được tạo ra để so khớp với 1 hay nhiều kýtự đầu vào để kiểm tra tính hợp lệ của nó, tìmkiếm sự xuất hiện của nó trong chuỗi khác.2. Regular ExpressionRegular Expression là gì, vai trò của nó trong các ứng dụng Java???b) Vai trò của Regular Expression (regex) trongcác ứng dụng JavaPhân tích cú phápXác định tính hợp lệ của dữ liệuXử lý chuỗiTách dữ liệu và tạo các báo cáoDo đó việc nắm vững regex sẽ giúp bạn tiếtkiệm thời gian và công sức trong việc thao tác vàtrích dẫn văn bản trên máy tính đặc biệt là trongcác ứng dụng của Java.2. Regular Expression (tt)API là gì? API của biểu thức chính quy?a) API (Application Programming Interface)Là một giao diện mà một hệ thống máytính hay ứng dụng cung cấp cho phép các yêucầu dịch vụ có thể được tạo ra từ các chươngtrình máy tính khác, và/hoặc cho phép dữ liệucó thể được trao đổi qua lại giữa chúng. Chẳnghạn một chương trình máy tính có thể dùng cáchàm API của hệ điều hành để xin cấp phát bộnhớ và truy xuất tập tin.3. APINhiều loại hệ thống và ứng dụng hiện thựcAPI như các hệ thống đồ họa, cơ sỡ dữ liệu, dịchvụ web.Đây là phần mềm hệ thống cung cấp đầyđủ các chức năng và các tài nguyên mà các lậptrình viên có thể lấy ra và từ đó tạo nên các tínhnăng giao tiếp người – máy: như các trình đơnkéo xuống, hộp thoại giúp tiết kiệm đượcnhiều thời gian.3. API (tt)b) API của biểu thức chính quy:API của biểu thức chính quy trong ngônngữ Java gồm có ba lớp cốt lõi mà bạn sử dụnghầu như mọi lúc:Pattern : mô tả một mẫu chuỗi nhất địnhMatcher : Kiểm tra một chuỗi ký tự xem nócó khớp với mẫu ko?PatternSyntaxException: để báo cho bạnbiết rằng có một số thứ ko thể chấp nhận đượcvới mẫu mà bạn đã thử định nghĩa.3. API (tt)a) Pattern.compile():Biên dịch biểu thức trong PatternVD: Pattern pat = Pattern.compile(“cats.*dogs”);Matcher matcher = pat.matcher(“cats and dogs”);boolean flag = matcher.matches();Chú ý: chúng ta cũng có thể biên dịch pattern sửdụng các cờ đặc biệt.4. PatternMột số phương thức cơ bản của lớp PatternCú pháp: static Pattern compile(String regex,int flags)VD: Pattern pattern =pattern.compile(“.*http://.*”,CASE_INSENSITIVE);Cờ được sử dụng ở trên làm cho pattern bỏqua một số trường khi kết hợp văn bảnb) matches():Kiểm tra chuỗi đầu vào có đúng với biểu thứctrong pattern hay ko?4. Pattern (tt)VD: String text = “this is the text to besearched”+”forn occurrences of the pattern”;Pattern pattern = Pattern.compile(“.*is.*”);boolean matches =Pattern.matches(pattern,text);System.out.println(“matches = ”+matches);Giải thích: ví dụ này tìm kiếm chuỗi ở trongbiến text cho sự xuất hiện của từ ‘is’, cho phépko hoặc nhiều ký tự trước và sau từ khóa,4. Pattern (tt)c) pattern.matcher();Tạo ra một đối tượng thuộc lớp Matchertừ lớp patternVD: Matcher matcher = Pattern.matcher(text);Lớp Matcher dùng để thực hiện nhữngviệc như kiểm tra và tìm kiếmd) Pattern.split():Tách chuỗi thành các chuỗi nhỏ phươngthức này có thể tách đoạn văn bản(chuỗi) thànhnhững đoạn nhỏ vào cho mãng chuỗi, sử dụngký hiệu tách4. Pattern (tt)VD:String text =“A sep text with sep many separator”;String patternString = “sep”;Pattern pattern = pattern.compile(patternString);String split = Patter.split(text);System.out.println(“split.lenght”+split.lenght);for(String element : Split)System.out.println(“element = ”+element);4. Pattern (tt)Giải thích: Ví dụ này sẽ tách đoạn văn bản trong biếntext thành 5 dãy strings riêng biệt và chúng sẽ đượcnạp vào mảng Stringe) pattern.pattern()Phương thức này chỉ đơn giản trả về một pattern khipattern được biên dịchVD:String patternString = “sep”;Pattern pattern =Pattern.compile(patternString);String pattern2 = Pattern.pattern();Trong ví dụ này thì biến pattern2 sẽ chứa cả giá trịsep4. Pattern (tt)a) Tạo một Matcher();Việc tạo ra một Matcher được thực hiện bởiphương thức matcher() của lớp PatternVD:Matcher matcher = Pattern.matcher(text);b) Phương thức matches();Lớp Matcher cung cấp phương thứcmatches() để kiểm tra sự giống nhau chính xác.=>Cụ thể: cố gắng tìm kiếm dãy đầu vào dựa trênkhuôn mẫu Method này chỉ thành công nếu toànbộ dãy ký tự đầu vào là giống nhau hoàn toàn.5. MatcherMột số phương thức cơ bản của lớp MatcherCú Pháp:boolean matches = matcher.matches();VD:import java.util.regex;import Java.until.*;Public class exactmatchpublic static void main(String args[])Pattern pat= Pattern.compile(“cats.*dogs”);Matcher matcher = pat.matcher(“cats and dogs”);boolean flag = Matcher.matches();//truePattern pat2 = Pattern.compile(“house.+family”);Matcher matcher2 = pat2.matcher(“housefamily”);boolean flag2 = matcher2.matches();//false5. Matcher (tt)Chú ý: bạn ko thể sử dụng phương thức này để tìmkiếm 1 biểu thức chính quy xuất hiện nhiều lần trong 1text.Để làm điều này bạn có cần sử dụng phương thứcfind() ,end()c) Phương thức lookingAt()Tìm kiếm 1 phầnCú Pháp: boolean lookingAt();Thử tìm kiếm chuỗi đầu vào, bắt đầu dựa trên khuônmẫu. Giống như phương thức matches(), phương thứcluôn bắt đầu từ đầu của chuỗi đầu vào nhưng ko giốngnhư phương thức matches() nó ko đòi hỏi toàn bộ chuỗiđầu vào phải giống.5. Matcher (tt)d) Phương thức find()Tìm kiếm 1 phầnThử tìm kiếm chuỗi tiếp theo của chuỗiđầu vào phù hợp vời chuỗi mẫu, phương thứcnày bắt đầu từ đầu chuỗi đầu vào hoặc tiếp nốiở vị trí tìm kiếm tiếp theo sau một kết quả tìmkiếm thành côngfind() đặc biệt hữu dụng khi bạn quan tâmđến tất cả các chuỗi con trong chuỗi đầu vàophù hợp với khuôn mẫu được cung cấp5. Matcher (tt)VD:Pattern pat = Pattern.compile(“john”);Matcher matcher = pat.matcher(“Hello,I am john parker”);Boolean flag = matcher.find();//trueBoolean flag2 = matcher.matches();//falsePattern pat2 = Pattern.compile(“john”);Matcher matcher3 = pat2.matcher(“john parker is my name”);boolean flag3 = matches.lookingAt();//trueboolean flag4 = matches.matches();//false vì ko được có thêmký tự trước và sau biểu thức5. Matcher (tt)e) Phương thức Start() và end()Trả về chỉ số đầu và cuối của biểuthức chính quy trong 1 đoạn khi được tìmthấy, nó thường kết hợp với hàm find()tìm chuỗi con trong chuỗi cha và muốnxuất ra vị trí đầu và vị trí cuối.5. Matcher (tt)VD: String text = “this is the text which is to beseareched”+”for occurrences of the the word”;String patternString = “is”;Pattern pattern = pattern.compile(patternString);Matcher matcher = pattern.matcher(text);Int count = 0;While(matcher.find())count ++;System.out.println(“found:”+count+”:”+matcher.Start()+”-”+matcher.end());5. Matcher (tt)Kết quả:found 1: 1:2 – 4found 2: 2:5- 7Found 3:23 – 25found 4:70 – 725. Matcher (tt)