P H P  V I E T  N A M  P O R T A L
Xin chào, Khách. Vui lòng đăng nhập hoặc đăng ký tài khoản.
Bạn đã quên email kích hoạt?






     Trang chủ | Download | Tự học PHP | Kho tư liệu | Diễn đàn
Trang: [1]
  In  
This topic has not yet been rated!
You have not rated this topic. Select a rating:
Tác giảChủ đề: Thắc mắc về preg_replace -> replacement  (Đã đọc 6801 lần)
snoob
PHP Intermediate
*
Posts: 44



Xem hồ sơ
« on: March 27, 2009, 11:16:15 PM »

Cho em hỏi  Grin
Quote
<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>
Đây là code trong php.net, em muốn hỏi ${1}1 là ý gì, $3 là ý gì
Logged
NguoiDauKho
PHP Intermediate
*
Posts: 120


Xem hồ sơ Email
« Trả lời #1 on: April 13, 2009, 12:36:07 AM »

Test thử coi rồi cho xem output nào
Logged
saothienta
PHP Intermediate
*
Posts: 1016

darkmovies.4vn.in


Xem hồ sơ WWW Email
« Trả lời #2 on: April 13, 2009, 12:49:57 AM »

$3 là phần so khớp của vị trí thứ 3 của 1 mẫu tức là cái dấu \d+ thứ 2 ở hàng trên đó. còn cáo ${1} thì mình hem biết.
Logged

Hãy nắm tay cùng đưa ngày coder VN đi lên.
Cùng tạo nên chỗ đứng cho VN
Hãy bắt đầu điều đó tại đây:darkmovies.4vn.in bộ 4rom mã nguồn mở đầu tiên của VN
longhoanggiang
PHP Starter
*
Posts: 2


Xem hồ sơ Email
« Trả lời #3 on: September 30, 2009, 10:01:24 PM »

${1} chính bằng $1

để ý cái pattern  ${1}1,$3

kết quả của đoạn code đó
là : biến 'April 15, 2003' -> 'April1,2003'

nếu viết $11, $3 thì ko được nếu viết $1 1, $3 thì được
nếu viết liền nhau thì phải ${1}1, $3
Logged
phuocmien
PHP Starter
*
Posts: 3


Xem hồ sơ
« Trả lời #4 on: November 13, 2009, 08:28:53 AM »

test 1234

Cho em hỏi  Grin
Quote
<?php
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);
?>
Đây là code trong php.net, em muốn hỏi ${1}1 là ý gì, $3 là ý gì
Logged
zinji
PHP Starter
*
Posts: 4


Xem hồ sơ Email
« Trả lời #5 on: May 14, 2010, 05:58:03 AM »

$pattern '/(\w+) (\d+), (\d+)/i';

đoạn này có ý nghĩa gì thế các bác ??
Logged
nicnicnic
PHP Starter
*
Posts: 2


Xem hồ sơ
« Trả lời #6 on: August 19, 2010, 12:45:06 AM »

$pattern '/(\w+) (\d+), (\d+)/i';

đoạn này có ý nghĩa gì thế các bác ??

Tìm hiểu về biểu thức chính quy (regular expression) :


Biểu thức so mẫu (pattern) dùng để mô tả 1 cách tổng quát 1 đối tượng (chuỗi) trong PHP, ví dụ:
preg_replace('/[^a-z0-9]+/i','',$str);
--> hàm này l loại bỏ tất cả các ký tự không phải là chữ (a-z và A-Z) hoặc số (0-9) ra khỏi chuỗi $str

Biểu thức so mẫu dùng rất hiệu quả và nhanh chóng, tuy nhiên theo TG biết thì cũng không nhiều người biết sử dụng cái này(nhất là ở nơi không có trường lớp đào tạo cơ bản về PHP như VN chúng ta) còn số người biết,hiểu rõ thì không training lại nên đã ít nay càng ít người biết sử dụng biểu thức so mẫu. Trong bài này TG chỉ giới thiệu 1 số kiến thức cơ bản và 1 vài ví dụ để dễ hiểu, hy vọng là giúp ít cho anh em.
Cấu trúc: như ví dụ trên thì /[^a-z0-9]+/i là 1 biểu thức so mẫu,
- giới hạn trong cặp dấu /<so mẫu>/x hoặc #<so mẫu>#x
- x có thể là 1 hoặc nhiều ký tự để mô tả dữ liệu được lấy và cũng có thể không có trong biểu thức so mẫu. Một số giá trị có thể có của  x:
+ i: không phân biệt chữ hoa, chữ thường
+ s: bao gồm cả các ký tự xuống dòng
+ Ngoài còn có 1 số giá trị khác như: S,U,... nhưng ít được sử dụng

Ta lấy ví dụ cho dễ hình dung:
preg_replace('/[^a-z0-9]/','','phpBASIC$')
-> php
preg_replace('/[^a-z0-9]/i','','phpBASIC$')
-> phpBASIC
Ý nghĩa của các ký tự trong biểu thức so mẫu:

\ loại bỏ các ký tự đặc biệt của pattern
  /(phpbasic)/ : chuỗi phpbasic
  /\(phpbasic\)/ : chuỗi (phpbasic)


^ ký tự bắt đầu
/^php(.*)/ : những chuỗi bắt đầu bằng chữ php


$ ký tự kết thúc
/(.*)basic$/ : những chuỗi kết thúc bằng chữ basic


. bất kỳ ký tự nào trừ ký tự xuông dòng
/(.*)/ : tất cả các ký tự nằm trên 1 dòng


[ và ] bắt đầu và kết thúc 1 lớp ký tự
/[a-z]/ : tất cả các ký tự a-z
  chú ý trong 1 lớp:
  ^ phủ định:
    /[^a-z]/ : những ký tự không phải là a-z
  -  1 khoảng:
   /[a-d]/ : bao gồm a,b,c,d


| hoặc
/a|b/ : ký tự a hoặc b
( và ) bắt đầu và kết thúc 1 so  mẫu con
/^a(c|d)b/ : chuỗi có dạng acb hoặc acd


? có hoặc không
/ab?c/ : chuỗi có dạng abc hoặc ac


* : 0 hoặc nhiều hơn ký tự
/a*/ : <null>, a, aa, aaa,.............


+ : có ít nhất 1
/a+/ : a,aa,aaa,...............


{ và } bắt đầu và kết thúc min/max ký tự
/a{1,3}/ :  a,aa,aaa


Các ký tự đặc biệt khác:

\n hoặc \r : ký tự xuông dòng
\t : ký tự tab
\d : bất kỳ ký tự số nào
\D : bất kỳ ký tự nào mà không phải là số
\s : bất kỳ ký tự khoảng trắng
\S : bất kỳ ký không phải là khoảng trắng
\w : bất kỳ từ nào ([a-zA-Z0-9])
\W : không phải là từ ([^a-zA-Z0-9])


Copy from : phpcodevn
Logged
cmxq
Administrator
PHP Intermediate
*****
Posts: 1330


Xem hồ sơ Email
« Trả lời #7 on: August 23, 2010, 08:16:11 PM »

Tham khảo qua Reg Ex trong JavaScript tại đây:
http://www.phpvn.org/index.php/topic,2989.0.html
Sau đó thì ứng dụng sang php sẽ hiểu được mấy cái ký hiệu đó là gì Cheesy
Logged

Trở về phpvn.org
Trang: [1]
  In  
 
Chuyển sang:  

Powered by SMF 1.1.15 | SMF © 2006-2007, Simple Machines . Modified by PHPVN Members