Luyenkim.Net!

...where your idea grows!

 
  • Decrease font size
  • Default font size
  • Increase font size
Trang chủ arrow Công nghệ thông tin arrow Kinh nghiệm-thủ thuật arrow Các hàm xử lý chuỗi hay xâu kí tự
Các hàm xử lý chuỗi hay xâu kí tự PDF In E-mail
(4 votes)
07/10/2007
Mục lục bài viết
Các hàm xử lý chuỗi hay xâu kí tự
Escape character
Modifiers
Trong seri bài viết về các hàm xử lý chuỗi này, xin giới thiệu với các bạn những công cụ mạnh nhất mà nếu nắm vững nó, bạn sẽ có khả năng rất lớn trong việc phát triển cho mình những cách lấy tin từ các báo khác nhau.

Mỗi ngày một ít, tôi sẽ cố gắng giải thích bằng cách dễ hiểu nhất, có gì thiếu sót hoặc sai, các bạn bổ sung thêm nhé, mình vừa làm vừa học mà.
Lấy một ví dụ đầu tiên.
preg_match_all('/<table>(.*?)<\/table>/s',$content,$matches,PREG_SET_ORDER);

Trong hàm preg_match_all thì tham số đầu tiên là mẫu tìm kiếm (pattern). Cấu trúc của 1 pattern là quan trọng nhất, khi bạn nắm vững các kí tự đặc biệt dành cho pattern thì mọi việc sẽ rất dễ dàng.

Cấu trúc: <delimiter><pattern><delimiter> [<modifiers>]

  • <delimiter> : có thể là / @ #
  • <pattern> : mẫu tìm kiếm
  • <modifiers> : bổ sung tùy chỉnh tìm kiếm.
Bài này sẽ giới thiệu về các kí tự đặc biệt trong
Bảng các kí tự đặc biệt trong pattern


Kí tự

Chức năng

\

Nếu bạn dùng các kí tự đặc biệt chỉ như là một kí tự bình thường thì bạn dùng kí tự đặc biệt kết hợp với \, và \ được gọi là escape character.

Chẳng hạn, dấu chấm . đại diện cho 1 kí tự bất kì trừ newline, thì để tìm trong 1 chuỗi dấu chấm bạn phải dùng \.

.

đại diện cho 1 và chỉ 1 kí tự bất kì trừ newline
VD: preg_match('/./', 'PHP', $matches);

$matches

Array
(
[0] => P
)

?

Chỉ ra rằng kí tự đứng trước nó có thể có mặt 0 hoặc nhiều lần.

'/PHP.?5/' sẽ phù hợp với PHP 5,PHP5,PHPx5,PHP35....

+

Chỉ ra rằng kí tự đứng trước nó có thể có mặt 1 hoặc nhiều lần.

'/a+b/' sẽ phù hợp với 'ab', 'aab', 'aaaaaaaab', nhưng sẽ không phù hợp với 'b'

preg_match('/a+b/', 'caaabc', $matches);

$matches

Array
(
[0] => aaab
)

*

Chỉ ra kí tự đứng trước có thể có mặt 0 hoặc nhiều lần

'/de*f/' phù hợp với 'df', 'def' và 'deeeef'

{m} {m.n}

Kí tự đứng trước phải xuất hiện đúng m lần hoặc từ m đến n lần

'/TRe{1,2}f/' phù hợp với 'tref' và 'treef', và không phù hợp với 'TReeef'.
Đặc biệt:
{,n} --> từ 0 đến n lần
{m,} --> từ m đến vô hạn

'/fo{2,}ba{,2}r/' phù hợp với 'foobar', 'fooooooobar', 'fooobaar', nhưng ko phù hợp với 'foobaaar'.

^

Bắt buộc phải đứng đầu

' /^ghi/' phù hợp với 'ghik' và 'ghi', nhưng ko phù hợp với 'fghi'.

$

Bắt buộc phải kết thúc, đứng sau cùng
'/Derick$/' phù hợp với "Rethans, Derick" và "Rethans, Derick\n" không phù hợp với "Derick Rethans".

[ ... ]

Tạo một lớp kí tự có thể xuất hiện, chẳng hạn bạn biết rằng sẽ có 2 trường hợp trong 1 liên kết như sau:
< a href="http://quanphp.net">quanphp.net

< a href='http://quanphp.net'>quanphp.net
Ở trên là dấu nháy kép, bên dưới là dấu nháy đơn, vậy làm sao để nhận 2 trường hợp đó là liên kết mà ko bỏ sót? đó là ý nghĩa của lớp (class)
Trong ví dụ trên lớp này sẽ là [\'"]
Trong 1 lớp bạn chỉ có thể dùng các kí tự sau:
  • - : đại diện cho 1 khoảng các kí tự : a-z A-Z
  • \ : escape character
  • ^ phần ngược lại , ví dụ:
    preg_match('/[^0-9]+/', 'PHP is released in 2005.',$matches);
    $matches
    Array
    (
    [0] => PHP is released in
    )

( ... )

Tạo 1 mẫu con, chẳng hạn bạn có chuỗi 'PHP in 2005.' và bạn muốn có chính xác cả thế kỉ (20) và năm hiện tại (05) bạn phải dùng mẫu sau : '/([12][0-9])([0-9]{2})/'

Gồm 2 mẫu con

([12][0-9]) phù hợp với 10 --> 29.

([0-9]{2}) phù hợp với năm hiện tại.

preg_match(
'/([12][0-9])([0-9]{2})/',
'PHP in 2005.',
$matches
);

$matches

Array
(
[0] => 2005
[1] => 20
[2] => 05
)

Phần tử đầu tiên (chỉ số 0) luôn chứa toàn bộ các chuỗi con.

(?: ...)

Tạo 1 mẫu con mà phần đó sẽ ko có trong kết quả trả về.

preg_match('@([A-Za-z ]+)(?:hans)@', 'Derick Rethans', $matches);

$matches

Array
(
[0] => Derick Rethans
[1] => Derick Ret
)
Phần tử đầu tiên (chỉ số 0) luôn chứa toàn bộ các chuỗi con.

(?P...)

Tạo 1 mẫu con và đặt tên cho nó.

preg_match(
'/(?P<century>[12][0-9])(?P<year>[0-9]{2})/',
'PHP in 2005.',
$matches
);

$matches

Array
(
[0] => 2005
[century] => 20
[1] => 20
[year] => 05
[2] => 05
)

 

Ok vậy là xong phần thứ nhất, và hay nhất của các hàm xử lý chuỗi PCRE Perl Regular Expression Library

Bài của admin quanphp.NET




Tin mới hơn:
Tin cũ hơn:

 

Please install Flash and turn on Javascript.

Đăng nhập






Bạn quên mật khẩu?
Chưa có tài khoản? Tạo một tài khoản

Liên kết website

vnfolk.com
http://www.clevermind.com.vn/
joomlaviet.org
Sửa ĐTDD
onbai.com
Trung tam ho tro giao vien

Thống kê

Chúng ta có 31 khách trực tuyến