Ungkapan biasa Perl


Ungkapan biasa (ungkapan biasa) menerangkan corak padanan rentetan, yang boleh digunakan untuk menyemak sama ada rentetan mengandungi subrentetan tertentu, menggantikan subrentetan yang sepadan atau mengekstrak subrentetan yang sepadan daripada rentetan tertentu keadaan tertentu, dsb.

Fungsi ungkapan biasa bahasa Perl sangat berkuasa, pada asasnya yang paling berkuasa antara bahasa yang biasa digunakan Banyak bahasa merujuk kepada ungkapan biasa Perl semasa mereka bentuk sokongan ungkapan biasa.

Tiga bentuk ungkapan biasa Perl ialah padanan, penggantian dan transformasi:

  • Padanan: m/

  • Penggantian: s /

  • Penukaran: tr/

Ketiga-tiga bentuk ini secara amnya sama dengan =~ atau ! ~ digunakan bersama, =~ ​​bermaksud sepadan, !~ bermaksud tidak sepadan.


Pengendali pemadanan

Pengendali pemadanan m// digunakan untuk memadankan pernyataan rentetan atau ungkapan biasa, contohnya, untuk memadankan "run" dalam skalar $bar, Kod adalah seperti berikut:

#!/usr/bin/perl

$bar = "I am php site. welcome to php site.";
if ($bar =~ /run/){
   print "第一次匹配\n";
}else{
   print "第一次不匹配\n";
}

$bar = "run";
if ($bar =~ /run/){
   print "第二次匹配\n";
}else{
   print "第二次不匹配\n";
}

Laksanakan atur cara di atas, dan hasil keluarannya ialah:

第一次匹配
第二次匹配

Pengubah suai padanan corak

Padanan corak mempunyai beberapa pengubah yang biasa digunakan, seperti yang ditunjukkan dalam jadual di bawah :

修饰符描述
i忽略模式中的大小写
m多行模式
o仅赋值一次
s单行模式,"."匹配"n"(默认不匹配)
x忽略模式中的空白
g全局匹配
cg全局匹配失败后,允许再次查找匹配串

Pembolehubah ungkapan biasa

Selepas pemprosesan perl, akan terdapat tiga nama pembolehubah khas untuk nilai yang dipadankan:

  • $` : Bahagian sebelumnya rentetan yang sepadan

  • $&: Rentetan yang sepadan

  • $' : Baki rentetan yang belum dipadankan lagi

Jika anda menggabungkan ketiga-tiga pembolehubah ini, anda akan mendapat rentetan asal.

Contohnya adalah seperti berikut:

#!/usr/bin/perl

$string = "welcome to php site.";
$string =~ m/run/;
print "匹配前的字符串: $`\n";
print "匹配的字符串: $&\n";
print "匹配后的字符串: $'\n";

Hasil output melaksanakan program di atas ialah:

匹配前的字符串: welcome to 
匹配的字符串: run
匹配后的字符串: oob site.

Operator penggantian

Pengendali penggantian s /// Ya Sambungan pengendali padanan yang menggantikan rentetan yang ditentukan dengan rentetan baharu. Format asas adalah seperti berikut:

s/PATTERN/REPLACEMENT/;

PATTERN ialah corak padanan, REPLACEMENT ialah rentetan gantian.

Sebagai contoh, kami menggantikan "google" dengan "php" dalam rentetan berikut:

#!/usr/bin/perl

$string = "welcome to google site.";
$string =~ s/google/php/;

print "$string\n";

Hasil keluaran untuk melaksanakan program di atas ialah:

welcome to php site.

Pengubah operasi penggantian

Pengubah suai operasi penggantian ditunjukkan dalam jadual berikut:

修饰符描述
i如果在修饰符中加上"i",则正则将会取消大小写敏感性,即"a"和"A" 是一样的。
m默认的正则开始"^"和结束"$"只是对于正则字符串如果在修饰符中加上"m",那么开始和结束将会指字符串的每一行:每一行的开头就是"^",结尾就是"$"。
o表达式只执行一次。
s如果在修饰符中加入"s",那么默认的"."代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!
x如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。
g替换所有匹配的字符串。
e替换字符串作为表达式

Pengendali penukaran

Berikut ialah pengubah suai yang berkaitan dengan pengendali penukaran:

修饰符描述
c转化所有未指定字符
d删除所有指定字符
s把多个相同的输出字符缩成一个

Contoh berikut menukar semua huruf kecil dalam $string pembolehubah kepada huruf besar:

#!/usr/bin/perl 

$string = 'welcome to php site.';
$string =~ tr/a-z/A-z/;

print "$string\n";

Hasil keluaran untuk melaksanakan atur cara di atas ialah:

WELCOME TO php SITE.

Contoh berikut menggunakan /s untuk ulangi pembolehubah $string Pemadaman aksara:

#!/usr/bin/perl

$string = 'php';
$string =~ tr/a-z/a-z/s;

print "$string\n";

Hasil output melaksanakan program di atas ialah:

runob

Lagi contoh:

$string =~ tr/\d/ /c;     # 把所有非数字字符替换为空格
$string =~ tr/\t //d;     # 删除tab和空格
$string =~ tr/0-9/ /cs    # 把数字间的其它字符替换为一个空格。

Lebih banyak peraturan ungkapan biasa

表达式描述
.匹配除换行符以外的所有字符
x?匹配 0 次或一次 x 字符串
x*匹配 0 次或多次 x 字符串,但匹配可能的最少次数
x+匹配 1 次或多次 x 字符串,但匹配可能的最少次数
.*匹配 0 次或多次的任何字符
.+匹配 1 次或多次的任何字符
{m}匹配刚好是 m 个 的指定字符串
{m,n}匹配在 m个 以上 n个 以下 的指定字符串
{m,}匹配 m个 以上 的指定字符串
[]匹配符合 [] 内的字符
[^]匹配不符合 [] 内的字符
[0-9]匹配所有数字字符
[a-z]匹配所有小写字母字符
[^0-9]匹配所有非数字字符
[^a-z]匹配所有非小写字母字符
^匹配字符开头的字符
$匹配字符结尾的字符
d匹配一个数字的字符,和 [0-9] 语法一样
d+匹配多个数字字符串,和 [0-9]+ 语法一样
D非数字,其他同 d
D+非数字,其他同 d+
w英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
w+和 [a-zA-Z0-9]+ 语法一样
W非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样
W+和 [^a-zA-Z0-9]+ 语法一样
s空格,和 [ntrf] 语法一样
s+和 [ntrf]+ 一样
S非空格,和 [^ntrf] 语法一样
S+和 [^ntrf]+ 语法一样
b匹配以英文字母,数字为边界的字符串
B匹配不以英文字母,数值为边界的字符串
a|b|c匹配符合a字符 或是b字符 或是c字符 的字符串
abc匹配含有 abc 的字符串 (pattern) () 这个符号会记住所找寻到的字符串,是一个很实用的语法.第一个 () 内所找到的字符串变成 这个变量或是 1 变量,第二个 () 内所找到的字符串变成 这个变量或是 2 变量,以此类推下去.
/pattern/ii 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问题. 如果要在 pattern 模式中找寻一个特殊字符,如 "*",则要在这个字符前加上 符号,这样才会让特殊字符失效