Expressions régulières Perl


L'expression régulière (expression régulière) décrit un modèle de correspondance de chaîne, qui peut être utilisé pour vérifier si une chaîne contient une certaine sous-chaîne, remplacer la sous-chaîne correspondante ou extraire la sous-chaîne correspondante d'une certaine chaîne. une certaine condition, etc.

La fonction d'expression régulière du langage Perl est très puissante, fondamentalement la plus puissante parmi les langages couramment utilisés. De nombreux langages font référence aux expressions régulières de Perl lors de la conception de la prise en charge des expressions régulières.

Les trois formes d'expressions régulières de Perl sont la correspondance, le remplacement et la transformation :

  • Correspondance : m/

  • Remplacement : s /

  • Conversion : tr/

Ces trois formes sont généralement les mêmes que =~ ou ! ~ sont utilisés ensemble, =~ signifie correspondre, !~ signifie ne pas correspondre.


Opérateur de correspondance

L'opérateur de correspondance m// est utilisé pour faire correspondre une instruction de chaîne ou une expression régulière, par exemple, pour faire correspondre "run" dans la barre $ scalaire, le code est la suivante :

#!/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";
}

Exécutez le programme ci-dessus et le résultat de sortie est :

第一次匹配
第二次匹配

Modificateurs de correspondance de modèles

La correspondance de modèles a certains modificateurs couramment utilisés, comme indiqué dans le tableau ci-dessous :

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

Variable d'expression régulière

Après le traitement Perl, il y aura trois noms de variables spéciaux pour la valeur correspondante :

  • $` : La partie précédente de la chaîne correspondante

  • $& : La chaîne correspondante

  • $' : La chaîne restante qui n'a pas encore été mise en correspondance

Si vous mettez ces trois variables ensemble, vous obtiendrez la chaîne d'origine.

L'exemple est le suivant :

#!/usr/bin/perl

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

Le résultat de l'exécution du programme ci-dessus est :

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

Opérateur de remplacement

Opérateur de remplacement s /// Oui Une extension de l'opérateur de correspondance qui remplace la chaîne spécifiée par une nouvelle chaîne. Le format de base est le suivant :

s/PATTERN/REPLACEMENT/;

PATTERN est le modèle correspondant, REPLACEMENT est la chaîne de remplacement.

Par exemple, nous remplaçons "google" par "php" dans la chaîne suivante :

#!/usr/bin/perl

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

print "$string\n";

Le résultat de l'exécution du programme ci-dessus est :

welcome to php site.

Modificateur d'opération de remplacement

Les modificateurs d'opération de remplacement sont présentés dans le tableau suivant :

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

Opérateur de conversion

Voici les modificateurs liés à l'opérateur de conversion :

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

L'exemple suivant convertit toutes les lettres minuscules de la variable $string en lettres majuscules :

#!/usr/bin/perl 

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

print "$string\n";

Le résultat de l'exécution du programme ci-dessus est :

WELCOME TO php SITE.

L'exemple suivant utilise /s pour répétez la variable $string Suppression de caractères :

#!/usr/bin/perl

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

print "$string\n";

Le résultat de l'exécution du programme ci-dessus est :

runob

Autres exemples :

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

Plus de règles d'expression régulière

表达式描述
.匹配除换行符以外的所有字符
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 模式中找寻一个特殊字符,如 "*",则要在这个字符前加上 符号,这样才会让特殊字符失效