正規表示式學習(三)

2021-06-27 14:18:06 字數 1332 閱讀 7354

現在介紹幾個小例子,並且引出重要的內容。

先介紹一下perl中<>的含義,可以把<>理解成一些語言中的getline()函式。

#123.pl

while( $line = <>)

print "$line";

在控制台下執行程式:perl -w 123.pl 123.txt>222.txt

結果會發現,222.txt檔案中的內容和123.txt中的內容一樣,可以理解成檔案的每一行被重定位到222.txt中了。

有四種主要的方法:

1、s/\bjeffs\b/jeff's/g

2、s/\b(jeff)(s)\b/$1'$2/g

3、s/(?<=\bjeff)(?=s\b)/'/g

4、s/(?=s\b)(?<=\bjeff)/'/g

通過這四種解決方法,可以看出後兩種和前兩種不同,後兩種採用的是向前和向後看的方式。也叫做「環視」。

環視

環視結構不匹配任何字元,只匹配文字中特定位置。環視有四種:

1、肯定逆序環視          (?<=)                          子表示式能夠匹配左側文字

2、否定逆序環視          (?3、肯定順序環視          (?=)                            子表示式能夠匹配右側文字

4、否定順序環視          (?!)                             子表示式不能夠匹配右側文字

修飾符

g  全域性

i   大小寫忽略

x  可以把正規表示式折行,加注釋。

例如:undef $/;             #進入檔案讀取模式

$text = <>;         #因為進入了檔案讀取模式,所以這樣讀的不是一行,而是整篇文章。

$text  =~ sgix

定義正規表示式並且在程式的任意位置使用

$regex = qr/..../                        例如:

$hostnameregex = qr/[-a-z0-9]+(\.[-a-z0-9]+)*\.(com|edu|info)/i

這樣就可以在程式中的任意乙個正規表示式中使用$hostnameregex

學到這裡最大的感受是,正規表示式真的很強大,但是現在還沒有運用的自如,所以,需要多加練習,多加思考。引用書中的一句話,結束本話題:

進入到沒有正規表示式的世界之後才發現,自己已經習慣正規表示式的功能和便捷了,而我顯然不希望在沒有正規表示式的世界呆太久。

正規表示式三

正規表示式通常包含字母文字 literaltext 和元字元 metacharacter 字母文字指的是普通文字如 abcde 可匹配字串中任何包含 abcde 的字串。元字元則更加靈活運用通用的表示式匹配所有符合此表示式規律的字串。c 正規表示式語法一 匹配單個字元 從中選擇乙個字元匹配 中間支援...

正規表示式 三

標題 正規表示式 三 dragontt 原作 關鍵字正規表示式 前面的文章中,介紹了正規表示式的基本語法,以及一些簡單的例子。但這些並不是我們會遇到的全部問題,有些時候我們不得不編寫一些較為複雜的正規表示式來解決我們的實際問題。這裡,我先提幾個問題,然後,我們逐個運用正規表示式的知識來解決。1 符合...

正規表示式(三)

目錄 一 子表示式 二 正向預查 三 例項 概念 正規表示式中將小括號包裹的部分稱為子表示式。正規表示式含有子表示式時,執行match 正規表示式不能帶修飾符g 或exec方法時,所有子表示式的匹配字串會作為乙個個陣列元素插入到返回結果的末尾。var str abcdefg var reg a bc...