ereg() 函數
int ereg(string pattern, string string, array [regs]);
將符合 pattern 的子字串放到 regs 陣列裡。string 是原字串,pattern 則是用來尋找特定條件的 regular expression,找到的字串則由左而右依序存放到 regs 陣列裡。ereg() 函數在搜尋字串時有大小寫之分。
$regs[0] 存放原來的字串,因此找到的子字串由 $regs[1] 開始存放。底下是幾個簡單的範例:
//取出 YYYY-MM-DD 日期格式的數字部份 ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs ))
//將 MMMMMM 每二個一組切開 ereg("(.{2})(.{2})(.{2})", $string, $nums);
以第一個範例來看,[0-9] 是一個 pattern,[0-9]{4} 也是一個 pattern,我們利用小括弧將多個 pattern 群組成一個 pattern,因此 ([0-9]{4}) 是一個 pattern,將符合這個 pattern 的子字串放到 $regs 陣列裡。這個範例共有 3 個 pattern,因此 $regs[1]、$regs[2] 與 $regs[3] 存放了符合條件的子字串。
相關函數:eregi(), ereg_replace(), eregi_replace()
ereg_replace() 函數
string ereg_replace(string pattern, string replacement, string string);
取代字串的函數。將符合 pattern 條件的子字串取代成 replacement,string 則是則來的字串,最後傳回完成取代後的字串。ereg_replace() 對字串有大小寫之分。
\\0 ~ \\9 是一種很好用的機制,在 pattern 括弧裡的字串會被記憶到 \\0 ~ \\9 裡,在取代時就可以使用 \\0 ~ \\9 表示括弧裡的字串。取代時,依括弧的位置,由左而右,由外而內依序將括弧裡的字串存放至 \\0 ~ \\9 裡。例如:
使用範例:
<?php
$string = "This is a test."; echo ereg_replace(" is", " was", $string). "<br>"; echo ereg_replace("( )is", "\\1was", $string). "<br>"; echo ereg_replace("(( )is)", "\\2was", $string). "<br>";
$html = '<p><a href="index.php">回首頁</a></p>'; echo ereg_replace("<([^>]|\n)*>", "", $html); // 去除 HTML 標籤
?>
在這個例子裡,ereg_replace("( )is", "\\1was", $string ) 裡的 \\1 為 " " (Space)。ereg_replace("(( )is)", "\\2was", $string) 裡的 \\2 也是 " ",而 \\1 則是 " is"。這有點類似 Perl regular expression 裡括弧的用法。
相關函數:ereg(), eregi(), eregi_replace()
eregi() 函數
int eregi(string pattern, string string, array [regs]);
功能與使用方法和 ereg() 一樣,不過 eregi() 對字串沒有大小寫的分別。
相關函數:ereg(), ereg_replace(), eregi_replace()
eregi_replace() 函數
string eregi_replace(string pattern, string replacement, string string);
功能與使用方法和 ereg_replace() 一樣,不過 eregi_replace() 對字串沒有大小寫的分別。
相關函數:ereg(), eregi(), ereg_replace()
split() 函數
array split(string pattern, string string, int [limit]);
將字串切開成數個子子串。split() 函數以符合 pattern 條件的子字串為邊界,將string 字串切成數個子字串,limit 限定要切割的個數。切割後傳回一個陣列,包含所有被切開的字串。
使用範例:
<?php
$passwd_list = `cat /etc/passwd`; $passwd_list = split( ":", $passwd_list);
for ($i = 0; $i < (count($passwd_list)+1)/7; $i++) { echo "<br>\n";
for ($j = 0; $j < 7; $j++) echo $passwd_list[$i*7+$j]. " "; }
?>
要注意一點,split() 函數對於 pattern 與字串是有大小寫之分的。這個範例主要是將 "/etc/passwd" 裡的字串以 ":" 為界切割成數個子字串。
相關函數:explode(), implode()
sql_regcase() 函數
string sql_regcase(string string);
將 regular expression 裡的 pattern 改成沒有大小寫之分的 pattern,常用來將 SQL 裡的 pattern 改成沒有大小寫之分的寫法。例如:
echo echo sql_regcase("Jollen");
輸出為:
[Jj][Oo][Ll][Ll][Ee][Nn]
再看一個 sql_regcase() 實際運用的例子:
$query = "select * from student where fullname = '". sql_regcase('Chen Jin-Hong'). "'"; echo $qery;
輸出為:
select * from student where fullname = '[Cc][Hh][Ee][Nn] [Jj][Ii][Nn]-[Hh][Oo][Nn][Gg]'
雖然 MySQL 接受這種 regular expression 的寫法,但是筆者並不鼓勵這種寫法,如果只是為了要能判別大小寫夾雜的字串,可以改用這種寫法:
select * from student where upper(fullname) = "CHEN JING-HONG"
--jollen