❶ preg_match用法
preg_match -- 進行正則表達式匹配
說明
int preg_match ( string pattern, string subject [, array matches [, int flags]])
在 subject 字元串中搜索與 pattern 給出的正則表達式相匹配的內容。
如果提供了 matches,則其會被搜索的結果所填充。$matches[0] 將包含與整個模式匹配的文本,$matches[1] 將包含與第一個捕獲的括弧中的子模式所匹配的文本,以此類推。
flags 可以是下列標記:
PREG_OFFSET_CAPTURE
如果設定本標記,對每個出現的匹配結果也同時返回其附屬的字元串偏移量。注意這改變了返回的數組的值,使其中的每個單元也是一個數組,其中第一項為匹配字元串,第二項為其偏移量。本標記自 php 4.3.0 起可用。
flags 參數自 PHP 4.3.0 起可用。
preg_match() 返回 pattern 所匹配的次數。要麼是 0 次(沒有匹配)或 1 次,因為 preg_match() 在第一次匹配之後將停止搜索。preg_match_all() 則相反,會一直搜索到 subject 的結尾處。如果出錯 preg_match() 返回 FALSE。
提示: 如果只想查看一個字元串是否包含在另一個字元串中,不要用 preg_match()。可以用 strpos() 或 strstr() 替代,要快得多。
例子 1. 在文本中搜索「php」
<?php
// 模式定界符後面的 "i" 表示不區分大小寫字母的搜索
if (preg_match ("/php/i", "PHP is the web scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}
?>
例子 2. 搜索單詞「web」
<?php
/* 模式中的 \b 表示單詞的邊界,因此只有獨立的 "web" 單詞會被匹配,
* 而不會匹配例如 "webbing" 或 "cobweb" 中的一部分 */
if (preg_match ("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}
if (preg_match ("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
print "A match was found.";
} else {
print "A match was not found.";
}
?>
例子 3. 從 URL 中取出域名
<?php
// 從 URL 中取得主機名
preg_match("/^(http:\/\/)?([^\/]+)/i",
"http://www.php.net/index.html", $matches);
$host = $matches[2];
// 從主機名中取得後面兩段
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>
❷ PHP中使用preg_match()匹配時,點號與橫線怎麼處理
中橫桿在本身就屬於正則 的一個語法
比如
A-Z表示從A到Z,而你要直接這個符號,那就應該用反斜杠轉義一下
\-這樣,
個人看法啊!
其實你上面的代碼似乎可以簡化一下
return preg_match("/^[0-9a-zA-Z_\.\-]+$/", $user) ? true : false;
這樣豈不是簡單明了
❸ php中preg_match的用法問題
preg_match("/<li (.*?)><span>(.*?)<\/span><strong id=\"J_StrPrice\" >(.*?)<\/strong>(.*?)<\/li>/i",$str,$arr);
$p=$arr[3];
❹ php preg_match()怎麼使用
$s="abdcddd<script>alert('ok');</script>";
$rule='#<.+>#';
echopreg_replace($rule,'',$s);
❺ php preg match的問題
$str='你的那段代碼';
$preg='/<a[sS]*?href="javascript:subText_new([^,]*?,[^,]*?,'?([d+]*?)'?);">/i';
$result=array();
preg_match_all($preg,$str,$result);//還不如一次性匹配所有的可能性
var_mp($result);
//你需要的結果在$result[3]中
die;
❻ PHP函數preg_match_all正則表達式的基本使用詳細解析
了解正則表達式之前,須要掌握一些常用的正則表達式的基礎知識,這些如果能記得最好記得,記不住須要用的時候能查到就行,就多個特殊字元,所以說正則表達式玩的就是特殊,具體大家可以查看更加細致的說明。
preg_match_all函數具體說明大家可以查看PHP手冊,本文運用
preg_match_all用於測試正則表達的效果。
實例代碼:
復制代碼
代碼如下:
$html
=
'<div
id="biuuu">jb51.net</div><div
id="biuuu_2">jb51.net2</div><div
id="biuuu_3">jb51.net3</div>';
實例要求:分別將每一個DIV元素的ID和內容取出,如biuuu,biuuu_2,biuuu_3,jb51.net,jb51.net2和jb51.net3(一些常用的抓站要領就是這樣匹配的)
分析:字元串是一個基本的HTML元素,每一個DIV元素對應該一個ID和內容,並且是獨立的,首先考慮如何
取出一個DIV內的ID值和內容,如:jb51.net,然後匹配其它類似的元素。一個DIV中須要取出兩個值,也就是兩個匹配的表達式,第一個表達式用於匹配ID值(biuuu),第二個表達式用於匹配ID的內容(jb51.net),正則表達式常用的表達式運用小括弧,那麼前面的元素將會變成如下形式:
<div
id="(biuuu)">(jb51.net)</div>
<div
id="(表達式1)">(表達式2)</div>
好,運用如上小括弧把須要匹配的區域執行
了劃分,接下來就是如何
匹配各個表達式內的內容,我們猜想一個ID可能是字母,數字或下劃線,那這就變得基本了,運用中括弧就可以實現,如下:
表達式1:[a-zA-Z0-9_]+
(表示匹配大小寫字母,數字和下劃線)
那如何
匹配表達式2,因為ID的內容可以是任意的字元,但是要留心,不能匹配<或>字元,因為如果匹配這兩個字元將會把後面運用的DIV都匹配出來,因此須要排除這兩個字元開始的元素,也就是不匹配以<或>字元,如下:
表達式2:[^<>]+
(表示不匹配<和>字元)
這樣,須要匹配的子表達式就實現了,但是還要須要匹配一個
的表達式,要領如下:
表達式:/
'\"(表達式1)\"'>(表達式2)<\/div>/
留心其中的雙引號"和/須要運用
\轉義字元轉義,然後把前面兩個表達式放進去,
如下:
'\"([a-z0-9_]+)\"'>/<div
id=\"([a-z0-9_]+)\">([^<>]+)<\/div>/
這樣就實現一個匹配每一個DIV元素ID值和內容的正則表達式,然後運用
preg_match_all函數測試如下:
復制代碼
代碼如下:
$html
=
'<div
id="biuuu">jb51.net</div><div
id="biuuu_2">jb51.net2</div><div
id="biuuu_3">jb51.net3</div>';
preg_match_all('/<div\sid=\"([a-z0-9_]+)\">([^<>]+)<\/div>/',$html,$result);
var_mp($result);
結果:
復制代碼
代碼如下:
array(3)
{
[0]=>
array(3)
{
[0]=>
string(30)
"<div
id="biuuu">jb51.net</div>"
[1]=>
string(33)
"<div
id="biuuu_2">jb51.net2</div>"
[2]=>
string(33)
"<div
id="biuuu_3">jb51.net3</div>"
}
[1]=>
array(3)
{
[0]=>
string(5)
"biuuu"
[1]=>
string(7)
"biuuu_2"
[2]=>
string(7)
"biuuu_3"
}
[2]=>
array(3)
{
[0]=>
string(8)
"jb51.net"
[1]=>
string(9)
"jb51.net2"
[2]=>
string(9)
"jb51.net3"
}
}
共有三個表達式,分別顯示每一個表達式匹配的值,並以數組的形式存儲,這樣就把每一個DIV元素的ID和內容取出。運用正則表達式最主要還是要知道須要什麼,然後跟椐須要執行
匹配,並且思路清晰,並適當的藉助preg_match_all函數執行
輸出調試,非常方便。
❼ PHP preg_match函數的用法 不是很清楚
preg_match 根據正則匹配字元串用的,對於新手來說比較復雜,不太容易理解。可以看看php的正則基本規則。理解之後就很不是很難了
第一段是根據第二個參數$user_number變數,匹配一個身份證號的(不完全肯定)(1)\d{17} :長度為17的必須是數字的字元串,(2)[\d|X]:長度為1的數字或「X」,(3)|\d{15}或者是長度為15的數字字元串。把匹配的結果保存到$counts[0]中。
第二個是電話號的,具體你可以自己再研究一下。
❽ 請問:php中的preg_match()函數運用的問題
php中preg_match() 函數用於進行正則表達式匹配,成功返回 1 ,否則返回 0
❾ php中preg_match的用法,手冊上面我看的不是很明白,請高手幫我看下下面的代碼,如何用prge_match進行匹配
據官方PHP手冊上的說明,當使用PCRE函數的時候, 模式需要由分隔符閉合包裹。 分隔符 可以使用任意非字母數字, 非反斜線, 非空白字元。經常使用的分隔符是正斜線(/), hash符號(#) 以及取反符號(~). 下面的例子都是使用合法分隔符的模式。
你的正則表達式沒用用分隔符進行包裹,"<title>(.*)</title>" 可以 修改為:
%<title>(.*?)</title>%si
其中:
% 代表 分隔符
s 代表 不匹配新行
i 代表 不區分大小寫
示例代碼如下,運行正常:
<?php
header('Content-type:text/html;charset=utf-8');
$url="http://www.weather.com.cn/";
$content=file_get_contents($url);
$pa = '%<title>(.*?)</title>%si';
preg_match($pa,$content,$a);
print_r($a);
?>
❿ PHP中使用 preg_match 模糊匹配
preg_match('模式', '要匹配的內容', '匹配出來的東西放到這個數組里')