펄 정규식


정규식(정규식)은 문자열 일치 패턴을 설명하며, 이는 문자열에 특정 하위 문자열이 포함되어 있는지 확인하거나, 일치하는 하위 문자열을 바꾸거나, 특정 문자열에서 일치하는 하위 문자열을 추출하는 데 사용할 수 있습니다. 특정 조건 등

Perl 언어의 정규식 기능은 매우 강력하며, 기본적으로 일반적으로 사용되는 언어 중에서 가장 강력합니다. 많은 언어에서 정규식 지원을 설계할 때 Perl의 정규식을 참조합니다.

Perl의 세 가지 정규식 형식은 일치, 대체 및 변환입니다.

  • 일치: m/

  • 대체: s /

  • 변환: tr/

이 세 가지 형식은 일반적으로 =~ 또는 과 동일합니다! ~는 함께 사용되며, =~는 일치함을 의미하고, !~는 일치하지 않음을 의미합니다.


일치 연산자

일치 연산자 m//는 문자열 문이나 정규식을 일치시키는 데 사용됩니다(예: 스칼라 $bar의 "run"과 일치).

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

위 프로그램을 실행하면 출력 결과는 다음과 같습니다.

第一次匹配
第二次匹配

패턴 일치 수정자

패턴 일치에는 다음과 같이 일반적으로 사용되는 수정자가 있습니다. 아래 표 :

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

정규 표현식 변수

Perl 처리 후에는 일치하는 값에 대해 세 가지 특수 변수 이름이 생깁니다.

  • $` : 일치하는 문자열의 이전 부분

  • $&: 일치하는 문자열

  • $' : 아직 일치하지 않은 나머지 문자열

이 세 변수를 함께 사용하면 원래 문자열을 얻게 됩니다.

예제는 다음과 같습니다.

#!/usr/bin/perl

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

위 프로그램을 실행한 결과는 다음과 같습니다.

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

대체 연산자

대체 연산자 s /// 예 지정된 문자열을 새 문자열로 바꾸는 일치 연산자의 확장입니다. 기본 형식은 다음과 같습니다.

s/PATTERN/REPLACEMENT/;

PATTERN은 일치하는 패턴이고 REPLACEMENT는 대체 문자열입니다.

예를 들어 다음 문자열에서 "google"을 "php"로 바꿉니다.

#!/usr/bin/perl

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

print "$string\n";

위 프로그램을 실행한 결과는 다음과 같습니다.

welcome to php site.

교체 연산 한정자

대체 연산 수식어는 다음 표와 같습니다.

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

변환 연산자

다음은 변환 연산자와 관련된 수식어입니다.

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

다음 예에서는 $string 변수의 모든 소문자를 대문자로 변환합니다.

#!/usr/bin/perl 

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

print "$string\n";

위 프로그램 실행의 출력 결과는 다음과 같습니다.

WELCOME TO php SITE.

다음 예에서는 /s를 사용하여 $string 변수 반복 문자 삭제:

#!/usr/bin/perl

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

print "$string\n";

위 프로그램 실행의 출력 결과는 다음과 같습니다.

runob

추가 예:

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

정규 표현식 규칙 추가

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