Bất cứ ai khi bước chân vào con đường lập trình chắc cũng đều đã từng làm việc với Regular Expression (hiểu nôm na nó là một chuỗi quy định một quy tắc nào đó). Nhưng chắc sẽ ít người hiểu thấu đáo được tác dụng và cách sử dụng nó như nào.
Trong bài viết này tôi xin phép giới thiệu sơ lược về Regular Expression, tất nhiên chỉ nằm trong vốn hiểu biết của tôi.
Dưới đây là bảng các kí tự, điều hướng trong Regular Expression.
Metacharacters
Ký tự | Ý nghĩa |
^ | Bắt đầu của chuỗi |
$ | Kết thúc của chuỗi |
. | Bất kỳ kí tự gì, ngoại trừ kí tự xuống dòng |
* | Tồn tại 0 hoặc nhiều hơn 0 ký tự |
+ | Tồn tại ít nhất 1 ký tự |
? | Tồn tại 0 hoặc 1 ký tự |
| | Hoặc |
( ) | Nhóm |
[ ] | Một tập các ký tự |
{ } | Mức độ lạp lại |
\ | Đánh dấu cho kí tự đặc biệt |
Single characters
\t | ký tự tab |
\n | đánh dấu dòng mới |
\r | ký tự trả về đầu dòng (CR) |
\x hh | ký tự có mã hex là hh |
| |
Matching
\w | Bất kì một ký tự thuộc nhóm chữ số, chữ cái và dấu "_" |
\W | Các ký tự không phải là từ (Không phải số, chữ cái và dấu "_") |
\s | Bất kỳ ký tự trắng nào (bao gồm dấu cách, tab và đánh dấu đầu dòng) |
\S | Không thuộc nhóm ký tự trắng |
\d | Bất kỳ ký tự là chữ số [0-9] |
\D | Bất kỳ ký tự nào không phải là chữ số |
|
Ví dụ
a* | Tồn tại 0 hoặc nhiều hơn các ký tự a |
a+ | Tồn tại ít nhất một ký tự a |
a? | Tồn tại 0 hoặc 1 ký tự a |
a{ m} | Có chính xác m ký tự a |
a{ m,} | Có ít nhất 1 a |
a{ m, n} | Có ít nhất m nhưng không có nhiều quá n ký tự a |
repetition? | (?) |
|
Different meanings apply inside a character set (“character class”) denoted by [
...]
so that, instead of the normal rules given here, the following apply:
[ characters] | Bất kỳ kí tự nào nằm trong dấu ngoặc vuông |
[ x- y] | Bất kỳ ký tự nào nằm ở giữa ký tự x và y ở trong bảng chữ cái |
[\-] | Ký tự “- ” |
[\n ] | Tương ứng với ký tự bắt đầu dòng mới |
[^ something] | Bất kỳ ký tự nào trừ những ký tự nằm trong ngoặc vuông |
expression | matches... |
abc | abc (tìm chính xác cụm từ abc trong vị trí bất kì của xâu) |
^abc | abc nằm ở đầu chuỗi |
abc$ | abc nằm ở cuối chuỗi |
a|b | hoặc a hoặc b |
^abc|abc$ | Bắt đầu hoặc kết thúc bằng chuỗi abc |
ab{2,4}c | chuỗi tìm kiếm bắt đầu bằng a, theo sau là 2 tới 4 ký tự b và kết thúc bằng c |
ab{2,}c | chuỗi tìm kiếm bắt đầu bằng a, theo sau là có ít nhất 2 ký tự b và kết thúc bằng c |
ab*c | chuỗi tìm kiếm bắt đầu bằng a, theo sau có thể có hoặc không có b và kết thúc bằng c |
ab+c | Chuối tìm kiếm bắt đầu bằng a, theo sau có ít nhất 1 ký tự b và kết thúc bằng c |
ab?c | Chuỗi tìm kiếm bắt đầu bằng a, theo sau là 0 hoặc 1 b và kết thúc bằng c |
a.c | Chuỗi tìm kiếm bắt đầu bằng a, theo sau là bất kì ký tự nào ngoại trừ dấu đánh dấu bắt đầu dòng mới và kết thúc bằng c |
a\.c | tìm chuỗi a.c |
[abc] | Bất kỳ ký tự nào trong a, b và c |
[Aa]bc | hoặc là Abc hoặc abc |
[abc]+ | chuỗi có chứa bất kỳ (không trống) các ký tự nào trong a, b và c |
[^abc]+ | Bất kỳ chuỗi có chứa (không trống) các ký tự không phải là a, b và c |
\d\d | bất kỳ chuỗi số có 2 chữ số |
\w+ | chuỗi có ít nhất một ký tự là chữ số, chữ cái và dấu "_" |
100\s*mk | Là sâu bắt đầu bằng chuỗi 100, theo sau là 0 hoặc nhiều ký tự trắng và kết thúc bằng chuỗi mk |
abc\b | abc when followed by a word boundary (e.g. in abc! but not in abcd ) |
perl\B | perl when not followed by a word boundary (e.g. in perlert but not in perl stuff ) |
Bàn thêm về cụm ký tự nằm trong dấu ():
- Nhóm ký tự nằm trong dấu () dùng để phân nhóm chuỗi, ví dụ như kiểu xâu chỉ định có khớp với nhóm (a) hay (b) hay không.
- Xem thêm tại: http://stackoverflow.com/questions/3512471/what-is-a-non-capturing-group
Xem thêm tại: https://www.cs.tut.fi/~jkorpela/perl/regexp.html
Cấu trúc "Không chứa":
Trả lờiXóahttp://www.regular-expressions.info/lookaround.html
- Sử dụng cặp (?!) để tạo luật không chứa
Regex in java:
Trả lờiXóahttp://www.vogella.com/tutorials/JavaRegularExpressions/article.html