本想作個簡單的採集程序,發現被抓頁面代碼的規律後發現抓下來的內容沒有放到一個數組中,而是放在一個元素中,無奈找遍資料發如今正則表達式後加上」/iUs」後居然能夠了。php
網上關於iUs的說明多數都是抄襲的,沒有作過多的解釋,對於一個小學畢業證是買來的人來講是在是很差理解。不過幸好Google讓我找到答案。正則表達式
「iUs」 在這裏叫「模式修正符」。模式修正符其實就是幾個字母,能夠一次使用一個也能夠一次使用多個,每個都具備必定的意義,模式修正符是對正則表達式的擴展;「/模式修正符」,其中正斜線「/」爲邊界符。下表列出來有那些模式修正符:數組
模式修正符 | 說明 |
i | 表示在和模式進行匹配進不區分大小寫 |
m | 將模式視爲多行,使用^和$表示任何一行均可以以正則表達式開始或結束 |
s | 若是沒有使用這個模式修正符號,元字符中的」.」默認不能表示換行符號,將字符串視爲單行 |
x | 表示模式中的空白忽略不計 |
e | 正則表達式必須使用在preg_replace替換字符串的函數中時纔可使用(講這個函數時再說) |
A | 以模式字符串開頭,至關於元字符^ |
Z | 以模式字符串結尾,至關於元字符$ |
U | 正則表達式的特色:就是比較「貪婪」,使用該模式修正符能夠取消貪婪模式 |
1,模式修正符m。函數
<?php
$pattern = ‘/^abc/m’;
$string = ‘bcd
abc
cba’;
if (preg_match($pattern, $string, $arr)) {
echo 「正則表達式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>」;
print_r($arr);
} else {
echo 「<font color=’red’>正則表達式{$pattern}和字符串{$string}匹配失敗</font>」;
}
?>spa
匹配結果是成功的。注意:咱們在使用模式修正符m的時候,將匹配字符串當作是多行而不是默認的單行,因此任何一行只要是以abc開頭,就匹配成功。可是,若是能匹配的行前面有空格的話,就不能匹配了!除非修改正則表達式的匹配模式。ci
2,模式修正符s。字符串
<?php
$pattern = ‘/a.*c/s’;
$string = ‘adsadsa
c’;
if (preg_match($pattern, $string, $arr)) {
echo 「正則表達式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>」;
print_r($arr);
} else {
echo 「<font color=’red’>正則表達式{$pattern}和字符串{$string}匹配失敗</font>」;
}
?>string
此次的匹配記過也是成功的。若是你將上例中的模式修正符s去掉的話,匹配就會失敗。由於模式修正符s將匹配字符串看做是單行的,因此這個時候,元字符中的」.」就能夠表示換行符號了。table
3,模式修正符x。擴展
<?php
$pattern = ‘/a c/x’;
$string = ‘a c’;
if (preg_match($pattern, $string, $arr)) {
echo 「正則表達式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>」;
print_r($arr);
} else {
echo 「<font color=’red’>正則表達式{$pattern}和字符串{$string}匹配失敗</font>」;
}
?>
此次的匹配結果是失敗的。由於咱們使用模式修正符x取消了模式中的空格。注意:咱們沒法使用模式修正符取消\s表示的空白。
4,模式修正符A。
<?php
$pattern = ‘/ac/A’;
$string = ‘acahgyghvbm’;
if (preg_match($pattern, $string, $arr)) {
echo 「正則表達式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>」;
print_r($arr);
} else {
echo 「<font color=’red’>正則表達式{$pattern}和字符串{$string}匹配失敗</font>」;
}
?>
正則表達式表示的含義是匹配以ac開頭的字符串,結果成功。
模式修正符Z表示的是以字符串結尾的匹配,和A的用法是同樣的,咱們再也不進行演示。
5,模式修正符U。
這個模式修正符是十分重要的!在正則表達式中,其自己是「貪婪」的。那什麼是貪婪模式呢?貪婪模式的意思就是說,正則表達式默認會在查找到第一個匹配後,繼續嘗試後面的匹配,若是能找到匹配,則匹配最大的範圍字符串。但有的時候這並非咱們想要的結果,因此咱們須要取消貪婪模式。
咱們仍是先看一個貪婪模式的例子:
<?php
$pattern = ‘/<b>.*<\/b>/’;
$string = ‘<b>welcome</b> <b>to</b> <b>phpfuns</b>’;
if (preg_match($pattern, $string, $arr)) {
echo 「正則表達式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>」;
print_r($arr);
} else {
echo 「<font color=’red’>正則表達式{$pattern}和字符串{$string}匹配失敗</font>」;
}
?>
這個實例的本意是匹配welcome,可是結果卻匹配了welcome to phpfuns整個字符串(注意咱們的字符串’welcome to phpfuns’,其開頭和結尾正好構成了正則表達式的模式匹配,因此匹配成功),這就是正則表達式的貪婪模式。固然,這不是咱們要的結果。
咱們可使用模式修正符U和元字符?兩種方式取消正則表達式的貪婪模式。
模式修正符U取消貪婪模式
<?php
$pattern = ‘/<b>.*<\/b>/U’;
$string = ‘<b>welcome</b> <b>to</b> <b>phpfuns</b>’;
if (preg_match($pattern, $string, $arr)) {
echo 「正則表達式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>」;
print_r($arr);
} else {
echo 「<font color=’red’>正則表達式{$pattern}和字符串{$string}匹配失敗</font>」;
}
?>
元字符?取消貪婪模式
<?php
$pattern = ‘/<b>.*?<\/b>/’;
$string = ‘<b>welcome</b> <b>to</b> <b>phpfuns</b>dsadsadas’;
if (preg_match($pattern, $string, $arr)) {
echo 「正則表達式<b>{$pattern}</b>和字符串<b>{$string}</b>匹配成功<br>」;
print_r($arr);
} else {
echo 「<font color=’red’>正則表達式{$pattern}和字符串{$string}匹配失敗</font>」;
}
?>
注意元字符的位置,咱們必須在「」以前結束貪婪模式,才能達到咱們的目的