Perl語言入門(06 正則表示式)
由於公司需要,本人最近在學習Perl這種指令碼語言,本文是我在學習Perl的過程中總結出來的一些心得和筆記,希望能夠幫助也在學習Perl的各位同僚。廢話不多說直接上乾貨!!!
————————————————————————— 乾貨分割線 ———————————————————————————
Perl變數$_常常用於Perl需要預設值的時候.
模式表示方式:m/simon/
Exp:
If(m/Piglet/){
#模式Piglet在$_中
}
在這個模式中,除非字元是個元字元,否則每個字元均與自己相匹配。大多數“標準”字元均與自己相匹配,這些字元包括A至Z、a至z和數字。元字元是指改變了模式匹配執行特性的那些字元。下面是元字元的列表:
^ $ () \ | @ [ { ? . + *
在你的模式中,如果想要匹配元字元的原義值,只需要在元字元的前面加上一個反斜槓即可,如下所示:
m/I won \$10 at the fair/;
前面我們已經講過模式匹配運算子通常用m / /來表示。實際上,在許多情況下,當模式中包含斜槓( /)時且模式的結尾則可能與模式內的斜槓相混淆,可用另一個字元來代替它,因此括號裡面的斜槓的前面必須加上反斜槓,這給閱讀帶來了不便,因此perl規定可以用你想要的任何其他字元來代替斜槓,如下面這個例子所示:
If(m,Waldo,){
Print “found waldo.\n”;
}
如果將模式括起來的字元(稱為界限符
Exp:
#!/usr/bin/perl $pat = <STDIN>; chomp $pat; $_ = "The phrase that pays"; if(/$pat/){ print "\"$_\" contains the pattern \"$pat\"\n"; }
元字元的介紹:
.(圓點):用於匹配除了換行符外的任何單個字元.如/p.t/可匹配pot,pit,carpet.’.’要求存在一個字元,但不能有更多字元.當普通字元的前面加上反斜槓後,它就變成了元字元。正如你在第2學時中看到的字串那樣,有些字元的前面加上反斜槓後,它在字串中就具備了特殊含義。在正則表示式中,所有這些字元幾乎代表相同的值,如表6 - 1所示:
萬用字元:
元字元+用於使前面的字元與後面的字元至少匹配一次,也可以任意次地進行匹配,並且仍然擁有匹配的表示式。因此, / d o + g /將能夠與下面的字串匹配:
Hounddog,hotdog doogie dooooooogdoog,
但不能與下面的字元匹配:
Badge,doofus,Doogie(區分大小寫)
元字元*使得前面的字元可以進行0次或多次匹配。換句話說,模式/ t * /可以進行任意次的匹配,但是,如果沒有匹配的字元存在,這也沒有問題。因此,/ c a r * t /將能夠與下面的字元匹配:
carted,cat,carrrt
但不能與下面的字元匹配:
Carrot,carl,caart
元字元?:用於使前面的字元進行0次或一次匹配(但是不能超過一次)。
元字元{}:使用{}可以對你制定的字串進行指定次數的匹配.格式如下:
Pat{n,m};
N為匹配的最小次數,m為最大次數.pat是你試圖量化匹配的字元或字元組,n,m可以分別省略,但不能同時省略,例如:
/x{5,10}/ x至少出現5次最多出現10次
/x{5,}/
/x{0,10}/
/x{5}/ #正好出現5次
萬用字元. *:可以用它來匹配任何東西,通常是你感興趣的其他兩樣東西之間的任何東西。例如/ f i r s t . * l a s t /。這個模式設法匹配單詞f i r s t,再匹配它後面的任何東西,然後匹配單詞l a s t。請觀察/ f i r s t . * l a s t /是如何匹配下面的字串的:
first then last; The good players get picked first, the bad last. The first shall be last, and the last shall be first.
P e r l的正則表示式擁有這樣一個工具,它稱為字元類。若要編寫一個字元類,可以用方括號[ ]將這些字元括起來。進行匹配時,字元類中的所有字元被視為單個字元。在一個字元類中,可以設定字元的範圍(在範圍有意義的時候),方法是在上限與下限之間加一個連字元。下面是一些例子:
由於]、^和-等字元都是字元類中的特殊字元,因此,如果按照字元的原義來匹配字元類中的這些字元,就要使用某些規則。若要匹配字元類中的原義字元^,必須確保它不出現在字元類中的第一個字元的位置上;若要匹配字元],你既必須將它放在字元類中的第一個字元位置上,也可以在它的前面加上一個反斜槓(例如/[abc\ ] ]/);若要將一個原義連字元( -)放在字元類中,你只需要將它放在字元類中的第一個字元位置上,或者在它的前面放一個反斜槓。
| 字元:在|兩邊進行選擇,例 如:
If(/dogs|cats/){
Print “$_ contains a pet \n”
}
正確的選擇模式為: /(fr|b|cl|fl)og/; (不同部分用括號)
$_ = “apple is red ”;
($fruit ,$color ) = /(.*)\sis\s(.*)/;
在上面這個程式碼段中,該模式先對任意物件(用(.*)來表示,作為一個組)進行匹配,然後對白空間(\s)進行匹配,再對單詞i s進行匹配,然後匹配一個白空間(用\s表示),再對任意物件(用(.*)來表示,也作為一個組)進行匹配。這兩個分組的表示式返回左邊的列表,並賦予$ f r u i t和$ c o l o r。
Exp:
$_ = "banana is yellow";
if(($fruit,$color) = /(.*)\sis\s(.*)/){
print "fruit is $fruit,color is $color\n";
}
輸出:
位置萬用字元:
插入記號( ^):正則表示式開頭的插入記號告訴正則表示式只匹配一行開頭的字元。例如, / ^ v i d e o /只匹配單詞v i d e o,如果它出現在一行的開頭的話。
美元符號( $):正則表示式結尾處的美元符號能夠使模式只匹配一行結尾的字元。例如/ e a r t h $ /用於匹配e a r t h ,不過它只能位於行尾。
替換運算子S/// :
s/searchpattern/replacement/;替換運算子用於預設搜尋$ ,找出searchpattern, 並且用r e p l a c e m e n t來替換整個匹配的正則表示式。該運算子返回匹配的數量或進行替換的數量,如果沒有進行任何匹配,則返回0。
Exp:
$_ = "Our house is in the middle of our street";
s/middle/end/;
print $_;
輸出:
替換運算子也可以使用非斜槓( /)的界限符,使用的方法與匹配運算子相同。只需要直接在s的後面加上你想要的界限符即可,如下所示:
S#searchpattern#replacement#;
連線運算子=~:該運算子不進行賦值,它只是取出右邊的運算子,並使它對左邊的變數進行操作。整個表示式擁有的值與使用$ 時所擁有的值是相同的,如果要對非$_的變數使用匹配運算子和替換運算子,則必須將它們與該變數連線起來。為此可以使用連線運算子= ~
$weight =”185 lbs”;
$weight =~s/lbs//;
在模式匹配中,若不考慮大小寫字母,可以使用以下程式碼:
/[Mm][Aa][Bb]/; #笨拙寫法
替換運算子(s / / /)和匹配運算子(m / /)能夠在匹配正則表示式時不考慮大小寫字母,
如果匹配項的後面跟一個字母i的話,例如:
/macbeth/i; #不區分大小寫
上面這個例子可以對M a c b e t h進行匹配,無論它是使用大寫字母、小寫字母還是大小寫混合字母(M a C b E t H)。
Exp:
$f = "one fish,two frogs,red fred,blue foull";
@F = $f =~ m/\W(f\w\w\w)/g;
#@F = $f =~ m/\W(f\w\w)/g; #3ge\w
#@F = $f =~ m/\W(f\w\w)/; #無g
print @F;
輸出:
該模式首先匹配一個非單詞字元,然後匹配字母f,接著匹配4個單詞字元。字母f和4個單詞用括號分組。該表示式被計算後,變數@ F將包含4個元素,即f i s h、f r o g、f r e d和f o u l。在標量上下文中,修飾符g使得匹配操作迭代通過整個字串,為每個匹配操作返回真,當不再進行更多的匹配操作時,返回假.
Exp:
$letter = 0;
$phrase = "What's my line?";
while($phrase =~/\w/g){
$letter++;
}
print $letter;
輸出:11
Ps:what’s算一個單詞且’不算.w h a t s m y l i n e共11個
Grep:查詢陣列中特定元素的函式,語法:
Grep expression,list
Grep block list
Exp:
@dogs = qw(greyhound bloodhound terrier dasfhound mutt chihuahua);
@hounds = grep/hound/,@dogs;
print @hounds;
輸出:輸出@dogs中包含Hound的元素
@dogs的每個元素被依次賦予$_.然後根據$_對錶達式/hound/進行測試.返回真的每個元素被grep返回,並存放在@hounds中.首先,在表示式中, $ 是對列表中的實際值的引用。如果修改$ ,就會改變列表中的原始元素.
g r e p不一定必須與模式匹配或替換運算子一道使用,它可以與任何運算子一道使用。下面這個例子用於檢索長度超過8個字元的犬名:
@longdogs = grep length($_) > 8,@dogs;
m a p函式:該函式的句法與grep基本相同,不過它的表示式(或語句塊)返回的值是從map返回的,而不是$_的值。可以使用map函式,根據第一個陣列來產生第二個陣列.
Exp:
print "請輸入單詞:\n";
@input = <STDIN>;
chomp;
@words = map{split' ',$_} @input;
print @words;
在這個例子中,陣列@ i n p u t的每個元素(作為$ 傳遞給語句塊)均用空格隔開。這意味著@ i n p u t的每個元素均產生一個單詞列表。該列表存放在@ w o r d s中。@ i n p u t的每個相鄰行均被分隔開來,並在@ w o r d s中進行累加。
相關推薦
Perl語言入門(06 正則表示式)
由於公司需要,本人最近在學習Perl這種指令碼語言,本文是我在學習Perl的過程中總結出來的一些心得和筆記,希望能夠幫助也在學習Perl的各位同僚。廢話不多說直接上乾貨!!! ————————————————————————— 乾貨分割線 ——————————————
Python 爬蟲 爬取單個基因 表格資料的生物學功能 (urllib+正則表示式):
Python 爬蟲 爬取單個基因的生物學功能(urllib+正則表示式): import re import urllib from urllib import request url = 'https://www.ncbi.nlm.nih.gov/gene/?term=FUT1'
動態保留整數位以及動態保留小數位,然後可正可負(運用正則表示式)
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>使用者註冊</title> <script src="http://libs.baidu.com/jquery
python進階(爬蟲正則表示式)
一、正則表示式的基本知識: 1、正則表示式是一種高度專業化的程式語言,並不是只在python語言中存在,而python需要插入 re 模組才能使用 正則表示式。 2、正則表示式只能處理字串,用於模糊匹配。 3、正則表示式的區間是閉區間。 二、正則表示式組成: &nb
MyEclipse去除網上覆制下來的程式碼帶有的行號(使用正則表示式)
一、正則表示式去除程式碼行號 作為開發人員,我們經常從網上覆制一些程式碼,有些時候複製的程式碼前面是帶有行號,如: MyEclipse本身自帶有查詢替換功能,並且支援正則表示式替換,使用正則替換就可以很容易去除這些行號 使用快捷鍵“ctrl+F”開啟MyEclipse的查詢替換功能,如
Python 爬蟲 爬取單個基因 表格資料的生物學功能 (urllib+正則表示式):
Python 爬蟲 爬取單個基因的生物學功能(urllib+正則表示式): import re import urllib from urllib import request url = ‘https://www.ncbi.nlm.nih.gov/gene
Windows 批量重新命名檔案(支援正則表示式)
今天整理了一批檔案,命名有點上亂,所以想批量修改一下。 在網上找了一工具,叫Ant Renamer,相當不錯。主介面如下: 操作步驟很簡單: 1.新增檔案或資料夾,支援自動遞所有子目錄。 2.操作(在這裡設定重新命名的引數) 3.然後點選“開始”即可,左
過濾表情獲取過濾後的字元長度(通過正則表示式)
import java.util.regex.Pattern; /** * Created by Basil on 2017/5/10 13:00 */ public class GetInputContentLengh { //加入白名單 public stat
python re庫(正則表示式)入門
正則表示式(英文名稱:regular expression,regex,RE)是用來簡潔表達一組字串特徵的表示式。最主要應用在字串匹配中。 \d 數字:[0-9] \D 非數字: [^0-9] \s 空白字元:[ \t\n\x0B\f\r] \S 非空白字元:[^\s] \w 單詞字
Python爬蟲(正則表示式)
Python爬蟲(正則表示式) 最近接觸爬蟲比較多,下面我來展示一個剛爬取的成果,使用正則表示式的方法,希望對剛開始接觸爬蟲的小夥伴有所幫助,同時希望大佬們給予點評和指導 接下來,步入正題,使用正則表示式爬取資料是一種原始且有效的方法,正則表示式的作用即字元匹配,匹配出你想得到的
(轉)應該是目前最詳細的(正則表示式)語音視訊講解教程
(轉)應該是目前最詳細的(正則表示式)語音視訊講解教程 優酷線上地址: http://v.youku.com/v_show/id_XMzg2ODE4MTQ5Mg==.html?x&sharefrom=android&sharekey=a9c982b1c99597d3e1b
【知識積累】(二)、深入Regex(正則表示式)
\:將下一個字元標記符、或一個向後引用、或一個八進位制轉義符。例如,“\\n”匹配\n。“\n”匹配換行符。序列“\\”匹配“\”而“\(”則匹配“(”。即相當於多種程式語言中都有的“轉義字元”的概念。 ^:匹配輸入字串的開始位置。如果設定了RegExp物件的Multiline屬性,^也匹配“\n
【知識積累】(一)、瞭解Regex(正則表示式)
一、正則表示式簡介 一種可以用於模式匹配和替換的規範,由普通字元 + 特殊字元構成一個模板,用於對目標字串進行匹配、查詢、替換、判斷。 原始碼:JDK1.4中的java.util.regex下的Pattern和Matcher類。 二、常用語法 1、字元取值範圍 [abc]:表示可能是a
鬥圖網鬥圖全站爬取(用正則表示式re)
import re import requests import os class doutu_spyder(): first_url=[] first_name=[] headers=
Python:re模組(正則表示式)
#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCharm @file: re模組簡介.py @time:
C語言實現簡化的正則表示式
語法: 正則表示式和待匹配字串都是一行 “^” 標記正則表示式的開始 “$” 標記正則表示式的結束 “*” 匹配前面的子表示式零次或多次 “+” 匹配前面的子表示式一次或多次 “?” 匹配前面的子表示式零次或一次, 當該字元緊跟在任何一個其他限制符(*,+,?
js實驗-表單驗證(正則表示式)
<!DOCTYPE html> <html lang="en"> <head> <title>Document</title> </head> <script src="./1.js"></s
python之re模組(正則表示式)常用函式
1、compile() 編譯正則表示式模式,返回一個物件的模式。(可以把那些常用的正則表示式編譯成正則表示式物件,這樣可以提高一點效率。) 格式: re.compile(pattern,flags=0) pattern: 編譯時用的表示式字串。 flags 編譯標誌位,用於修改正
筆記(Python核心程式設計 第 1 部分 通用應用主題 1 章 正則表示式)
Python核心程式設計 第 1 部分 通用應用主
正則匹配任意字元(常用正則表示式的書寫)
http://www.unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm 正則教程 (注:元字元包括\ | ( ) [ ] { } ^ $ * + ? . ) 匹配中文字元的正則表示式: [\u4e00-