亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中正則表達式的示例分析

發布時間:2021-07-15 10:43:14 來源:億速云 閱讀:119 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關PHP中正則表達式的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

禁止分組的捕獲

在正則中分組很有用,可以定義子模式,然后可以通過后向引用來引用分組的內容,但是有的時候僅僅想通過分組來進行范圍定義,而不想被分組來捕獲,通過一個例子就能明白:

$str = "http://www.google.com";
$preg= "/http:\/\/\w+\.\w+.(?:net|com|cn)+/is";
$preg2= "/http:\/\/\w+\.\w+.(net|com|cn)+/is";
preg_match($preg,$str,$arr);
preg_match($preg2,$str,$arr2);

當模式中出現?:表示這個括號的分組不會被引用,運行下例子就能明白。

preg_match() 和 preg_match_all() 的區別

preg_match() 在匹配模式的時候匹配到一次就結束,而 preg_match_all() 則進行全局匹配,通過一個例子就能明白:

$str='hello world china';
$preg="/\w+\s/is";
preg_match($preg,$str,$arr);
print_r($arr);
preg_match_all($preg,$str,$arr);
print_r($arr);

正確理解 $ 和 ^

先說一個正則,為了匹配是否是手機號:

$str = "13521899942a";
$preg="/1[\d]{3,15}/is";
if (preg_match($preg,$str,$arr)) {
  echo "ok";
}

雖然字符串中有一個英文字母,但是這個子模式卻匹配了,原因就在于模式匹配到后就結束了,不會再去尋找英文字母,為了解決這問題 $ 和 ^ 就發揮作用了,比如讓字符串的開始和結尾必須匹配一定的模式,修改如下:

$str = "13521899942a";
$preg="/1[\d]{3,15}$/is";
if (preg_match($preg,$str,$arr)) {
  echo "ok";
}

$ 和 ^ 的跨行模式

默認的情況下,$ 和 ^ 只會匹配完整段落的開始和結尾,但是通過改變選項,允許匹配文本的每一行的開始和結尾,通過下面的例子就能明白

$str='hello
world';
$preg='/\w+$/ism';//$preg='/(?m)\w+$/is';
preg_match_all($preg,$str,$arr);
print_r($arr);

分組命名

在正則中通過括號分組后,可以使用 \1,\2 這樣的數字進行后向引用,但是假如正則中模式太多,在使用的時候就會比較混亂,這時候可以采用分組命名來進行引用,看個例子:

$str ="email:ywdblog@gmail.com;";
preg_match("/email:(?<email>\w+?)/is", $str, $matches);
echo $matches["email"] . "_" . $matches['no'];

懶惰模式

正則在匹配的時候是貪婪的,只要符合模式就會一直匹配下去,下面的例子,匹配到的文本是 <h3>hello</h3><h3>world</h3>

$str = "<h3>hello</h3><h3>world</h3>";
$preg = "/<h3>.*<\/h3>/is";
preg_match($preg,$str,$arr);
print_r($arr);

通過改變一個選項可以修改為懶惰模式,就是一旦匹配到就中止,修改代碼如下:

$str = "<h3>hello</h3><h3>world</h3>";
$preg = "/<h3>.*?<\/h3>/is";
preg_match($preg,$str,$arr);
print_r($arr);

進一步理解 preg_match_all()

通過這函數的最后一個參數,能夠返回不同形式的數組:

$str= 'jiangsu (nanjing) nantong
guangdong (guangzhou) zhuhai
beijing (tongzhou) haidian';
$preg = '/^\s*+([^(]+?)\s\(([^)]+)\)\s+(.*)$/m';
preg_match_all($preg,$str,$arr,PREG_PATTERN_ORDER);
print_r($arr);
preg_match_all($preg,$str,$arr,PREG_SET_ORDER);
print_r($arr);

強大的正則替換回調

雖然 preg_replace() 函數能完成大多數的替換,但是假如你想更好的控制,可以使用回調,不用多說看例子:

$str = "china hello world";
$preg = '/\b(\w+)(\w)\b/';
function fun($m){
    return $m[1].strtoupper($m[2]);
}
echo preg_replace_callback($preg,"fun",$str);

在這一點上,PHP 比 Python 強大的多,Python 中沒有正則回調,不過可以使用閉包的方式解決,可看我以前的文章。

preg_quote()

這個函數類似于 Python 中的 re.compile() 函數,假如在模式中一些元字符僅僅想表達字符的本身含義,可以轉義,但是假如在模式中寫太多的轉義,會顯得很混亂,可以使用這個函數來統一轉義:

$str = '\\*china*world';
$preg = "\*china";
$preg = preg_quote($preg);
echo $preg;
preg_match( "/{$preg}/is",$str,$arr);
print_r($arr);

向前查找 ?= 的妙用

用英文解釋可能比較貼切:

The "?=" combination means "the next text must be like this". This construct doesn't capture the text.
(1)這個例子可以獲取 URL 中的協議部分,比如 https,ftp,注意 ?: 后面的部分不在返回的內容中。

$str = "http://www.google.com";
$str = "https://www.google.com";
$preg = '/[a-z]+(?=:)/';
preg_match($preg,$str,$arr);
print_r($arr);

(2)"invisible" 分隔符

也叫 “zero-width” 分隔符,參考下面的例子:

$str = ("chinaWorldHello");
$preg = "/(?=[A-Z])/";
$arr = preg_split($preg,$str);
print_r($arr);

(3)匹配強密碼

instead of specifying the order that things should appear, it's saying that it must appear but we're not worried about the order.
The first grouping is (?=.{8,}). This checks if there are at least 8 characters in the string. The next grouping (?=.[0-9]) means "any alphanumeric character can happen zero or more times, then any digit can happen". So this checks if there is at least one number in the string. But since the string isn't captured, that one digit can appear anywhere in the string. The next groupings (?=.[a-z]) and (?=.[A-Z]) are looking for the lower case and upper case letter accordingly anywhere in the string.

$str= "HelloWorld2016";
if (preg_match("/^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$/", $str,$arr)){
  print_r($arr);
}

向后查找 ?<=

?<= 表示假如匹配到特定字符,則返回該字符后面的內容。
?= 表示假如匹配到特定字符,則返回該字符前面的內容。

$str = 'chinadhello';
$preg = '/(?<=a)d(?=h)/';  
preg_match($preg, $str, $arr);
print_r($arr);

感謝各位的閱讀!關于“PHP中正則表達式的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

蒙山县| 彝良县| 常德市| 宜良县| 西乌珠穆沁旗| 鹤山市| 满城县| 四子王旗| 延吉市| 德昌县| 石屏县| 安陆市| 新余市| 五河县| 霍山县| 饶河县| 吉木萨尔县| 大洼县| 罗城| 洛宁县| 抚远县| 县级市| 乐山市| 邢台市| 湖南省| 兴化市| 许昌县| 吴堡县| 什邡市| 芦山县| 类乌齐县| 霍林郭勒市| 勐海县| 高雄市| 芷江| 黔南| 奉贤区| 武安市| 楚雄市| 云南省| 惠州市|