------
Phần 73. Hàm
preg_replace, lấy tỉ giá từ một website
Đây là clip số 69:
Hàm preg_replace sử dụng để tìm kiếm và thay thế một chuỗi.
Cú pháp của hàm,
$result = preg_replace($pattern, $rep, $data);
- $result: chuỗi sau khi được thay thế
- $pattern: mẫu tìm kiếm
- $rep chuỗi thay thế
- $data: chuỗi nguồn
Ví dụ,
$pattern = '/Trudeau/i';
$rep = '<a
href="http://www.google.com">Trudeau</a>';
$data = file('du_lieu.txt')
or die('Không đọc được dữ liệu');
$data = implode('',
$data);
$result =
preg_replace($pattern, $rep, $data);
echo $result;
Ví dụ, vô hiệu nội dung JavaScript có trong văn bản:
$pattern =
array('/<script([^>]*)>/i','/<\/script([^>]*)>/i' );
$rep =
array('<pre><script\\1>','<script\\1></pre>');
$data = file('du_lieu.txt')
or die('Không đọc được dữ liệu');
$data = implode('',
$data);
$result =
preg_replace($pattern, $rep, $data);
echo $result;
Lưu ý:
$pattern = array('/<script([^>]*)>/i','/<\/script([^>]*)>/i'
); //(*)
$rep = array('<pre><script\\1>','<script\\1></pre>');
//(**)
Kí hiệu “\1” trong (**) có nghĩa là giữ nguyên giá trị của “([^>]*)”
trong (*)
Đây là clip số 70:
Để đọc nội dung của một website sử dụng hàm file_get_contents(‘đường
dẫn trang web’);
Ví dụ,
$data = file_get_contents('http://www.vietcombank.com.vn/') or
die('Không đọc được dữ liệu');
Đoạn mã sau lấy nội dung của một table dựa vào id.
$pattern =
'/(?<=id="Content_HomeSideBar_RatesBox_ExchangeRates_ExrateView">).*(?=<\/table>)/ismu';
$data =
file_get_contents('http://www.vietcombank.com.vn/') or die('Không đọc được dữ
liệu');
preg_match($pattern,
$data, $matches);
echo '<pre>';
print_r($matches);
echo '</pre>';
Lưu ý:
- Kí hiệu (?<=) nghĩa là bắt đầu bằng…, (?=) nghĩa là kết
thúc bằng…
- Để tìm các tham số của regular expression trong PHP sử
dụng từ khóa modifiers.
- i: không phân biệt chữ hoa, chữ thường
- u: UTF-8
- m: tìm trên nhiều dòng
- s: lấy kết quả gồm nhiều dòng
- U: (PCRE_UNGREEDY) This modifier inverts the
"greediness" of the quantifiers so that they are not greedy by
default, but become greedy if followed by ?. It is not compatible with Perl. It
can also be set by a (?U) modifier setting within the pattern or by a question
mark behind a quantifier (e.g. .*?).
In kết quả tìm được dưới dạng bảng:
$result = '<table border="1">' . $matches[0] .
'</table>';
echo $result;
Đưa dữ liệu từ dạng bảng vào mảng để sử dụng tiện lợi hơn,
dưới đây là đoạn mã:
// lấy bảng
$pattern =
'/(?<=id="Content_HomeSideBar_RatesBox_ExchangeRates_ExrateView">).*(?=<\/table>)/ismu';
$data =
file_get_contents('http://www.vietcombank.com.vn/') or die('Không đọc được dữ
liệu');
preg_match($pattern,
$data, $matches);
// đưa dữ liệu từ bảng
vào mảng có dạng sau
/* Array
*(
* [AUD] => Array
* (
* [0] => 17,265.73 // mua tiền mặt
* [1] => 17,369.95 // mua chuyển
khoản
* [2] => 17,524.89 // bán
* )
*
* [EUR] => Array
* (
* [0] => 26,261.98
* [1] => 26,341.00
* [2] => 26,575.96
* )
*...
*/
$pattern =
'/class="code">(.*)<\/td><td>(.*)<\/td><td>(.*)<\/td><td>(.*)<\/td.*\/tr>/imsU';
preg_match_all($pattern,
$matches[0], $matches);
foreach ($matches[1] as
$key => $value) {
$result[$value][] =
$matches[2][$key];
$result[$value][] =
$matches[3][$key];
$result[$value][] =
$matches[4][$key];
}
echo '<pre>';
print_r($result);
echo '</pre>';
-----------
Cập nhật [16/9/2020]
-----------