펄 정규식
정규식(정규식)은 문자열 일치 패턴을 설명하며, 이는 문자열에 특정 하위 문자열이 포함되어 있는지 확인하거나, 일치하는 하위 문자열을 바꾸거나, 특정 문자열에서 일치하는 하위 문자열을 추출하는 데 사용할 수 있습니다. 특정 조건 등
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/i | i 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问题. 如果要在 pattern 模式中找寻一个特殊字符,如 "*",则要在这个字符前加上 符号,这样才会让特殊字符失效 |