Perl 正規表示式
什麼是正規表示式?
Perl 正規表示式是用來匹配語句或語句組中的字串模式。正規表示式主要用於文字解析、模式匹配以及基於更多需求的表示式。我們有一些運算子,它們是由正規表示式專門使用的模式繫結 =~
和 !~
,這些是測試和賦值運算子。
正規表示式運算子
[^ ]*?@[^ ]*?\.[^ ]*
- Perl 匹配 -
m/.../
- Perl 替換 -
s/.../.../
- Perl 轉寫 -
tr/.../.../
在進一步研究之前,我們需要了解正規表示式的一些內容,在 Perl Regex 語法中有一些像元字元,萬用字元這樣的東西。
字元 | 意義 |
---|---|
\ |
特價或報價 |
* |
匹配 0 個或更多字元 |
+ |
匹配 1 個或更多字元 |
? |
匹配 0 或 1 個字元 |
| | 用來匹配不同的模式 |
() |
用於儲存匹配的模式 |
[] |
可以傳遞一組字元。專門用於數字和字母。 |
{} |
用於提供可以執行匹配的時間。 |
^ |
字串的開頭 |
$ |
字串結束 |
\w |
用於匹配單個字元或單詞,可以是字母數字,包括 _ |
\W |
匹配除字母數字以外的任何內容 |
\s |
用於匹配空格 |
\S |
匹配除空格以外的任何內容 |
\d |
匹配數字。不是十進位制值和負值 |
\D |
匹配數字以外的任何內容。 |
\t |
匹配選項卡空間 |
\n |
匹配換行符 |
以上是在模式匹配時可以使用的字符集。
讓我們看幾個例子。
比如使用者在指令碼執行期間提供一些輸入的情況,我們想檢查使用者是否輸入了某個名稱作為輸入。我們必須編寫正規表示式語法來提取名稱並將它列印出來。
my $userinput="Tastones Rocks";
if($userinput=~m/.*(Tastones).*/)
{
print "Found Pattern";
}
else
{
print "unable to find the pattern";
}
輸出:
Found Pattern
在這裡,我們將正規表示式編寫為 /.*(Tastones).*/.*
匹配字串中的所有字元。.
在 Perl 正規表示式匹配中指的是包括空格在內的任何字元。
讓我們看看我們如何構建一個正規表示式。
考慮一個包含多個單詞和數字的字串以及特殊符號的示例,例如 Hello every this this is my number:+ 001-99298373639
;
正規表示式:/^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i
Perl 匹配運算子
匹配運算子用於匹配某些語句或變數中的字串。
my $var="Hello this is perl";
if($var=~m/perl/)
{
print "True";
}
else
{
print "False";
}
輸出:
True
這段程式碼將列印 True
,因為 Perl 模式匹配標識變數中的字串。基本上,Perl 會在整個字串中搜尋文字,即使它在一個地方找到它也會返回 True
。模式可以在變數中的任何位置。我們可以試著用 !~
替換 =~
來檢視這兩個運算子之間的區別。
Perl 替換運算子
此運算子可用於搜尋和替換字元。
my $a="Hello how are you";
$a=~s/hello/cello/gi;
print $a;
輸出:
cello how are you
注意:我們實際上可以使用任何模式匹配字串,就像我們之前在替換運算子中所做的那樣。這裡我們用 gi
,其中 g
-全域性,i
-忽略大小寫。
Perl 轉寫操作符
這類似於替換,但它不使用任何 Perl 正規表示式,而是我們可以直接傳遞我們想要替換的值或單詞。
my $a="Hello how are you";
$a=~tr/hello/cello/;
print $a;
輸出:
Hello cello are you