Perl正则表达式

    xiaoxiao2025-06-14  18

    1、简单模式:若模式匹配的对象是$_的内容,只要把模式写在一对斜线//中就可以了,其实也是m//的缩写,m可以省略。

    $_ = "yabba dabba doo"; if(/abba/){ print "matched"; }`

    2、若模式匹配的对象不是$_的内容,绑定操作符=~用右边的模式来匹配左边的字符串。“

    if ($question =~ /please/) { print ("Thank you for being polite!\n"); } else { print ("That was not very polite!\n"); }

    3、模式中的特殊字符 (1)+ 表示匹配前一个条目一次以上。如:/de+f/指def、deef、deeeeef等。它尽量匹配尽可能多的相同字符,如/ab+/在字符串abbc中匹配的将是abb,而不是ab。

    (2)* 表示匹配前一个条目零次或多次。如/de*f/匹配df、def、deeeef等。

    (3)?表示前一个条目可有可无。如/de?f/匹配def、df。

    (4). 是能匹配任意一个字符的通配符,换行符除外。如/bet.y/可以匹配betty、betsy、bet=y、等等。因此.*会匹配任意字符零次到无限次数。.+会匹配任意字符1次以上。

    (5)转义字符\ 如果你想在模式中包含通常被看作特殊意义的字符,须在其前加斜线”\”。如:/*+/中*即表示字符*,而不是上面提到的一个或多个字符的含义。斜线的表示为/\/,点号的表示为/./。

    (6)匹配任意字母或数字 [a-z]表示任意小写字母,[A-Z]表示任意大写字母。任意大小写字母、数字的表示方法为:/[0-9a-zA-Z]/。 首字母大写,其余小写表示方法为/[A-Z][a-z]+/。

    (7)字符集 \d 任意数字 [0-9] \D 除数字外的任意字符 [^0-9] \w 任意单词字符 [_0-9a-zA-Z] \W 任意非单词字符 [^_0-9a-zA-Z] \s 空白 [ \r\t\n\f] \S 非空白 [^ \r\t\n\f]

    (8)锚位 ^ 或 \A 仅匹配串首 $ 或 \Z仅匹配串尾 \b 匹配单词边界 \B 单词内部匹配

    例如:/^def/只匹配以def打头的字符串,/def /def/def /只匹配字符串def(?)。\A和\Z在多行匹配时与^和$不同。 /\bfred\b/可以匹配fred,但无法匹配fredrick、alfred、或manfredmann。 \B它能匹配所有\b不能匹配的位置。因此/\bsearch\B/会匹配searches、searching与searched,但不能匹配search或researching。

    (9)匹配指定数目的字符 字符对{}指定所匹配字符的出现次数。如:/de{1,3}f/匹配def,deef和deeef;/de{3}f/匹配deeef;/de{3,}f/匹配不少于3个e在d和f之间;/de{0,3}f/匹配不多于3个e在d和f之间。

    (10)择一匹配 字符”|”指定两个或多个选择来匹配模式。如:/def|ghi/匹配def或ghi。

    4、模式匹配修饰符(flag) /g 改变模式中的所有匹配 /i 忽略模式中的大小写 /e 替换字符串作为表达式 /m 将待匹配串视为多行 /o 仅赋值一次 /s 将待匹配串视为单行 。因为点号.无法匹配换行符,那么/s将模式中的每个点号转换成字符集[\d\D]来处理,就是说匹配任意字符,包括换行符。 /x 忽略模式中的空白

    5、用s///进行替换 查找并替换,但是该操作只会进行一次替换。s///g可以进行所有可能的不重复的替换。 例如: s/^\s+//; 将开头的空白替换成空字符串 s/\s+$//; 将结尾的空白替换成空字符串 s/^\s+|\s+$//g; 去除开头和结尾的空白符

    6、大小写转换 \U:将其后的所有字符转换成大写的 \L : 将其后的所有字符转换成小写的 \E: 关闭大小写转换的功能 \l和\u: 只影响其后的第一个字符

    例如:

    $_ = "I saw Barney with Fred"; s/(fred|barney)/\U$1/gi; # "I saw BARNEY with FRED" s/(fred|barney)/\L$1/gi; # "I saw barney with fred" s/(\w+) with (\w+)/\U$2\E with $1/i; # "I saw FRED with barney" s/(fred|barney)/\u$1/ig; # "I saw FRED with Barney" s/(fred|barney)/\u\L$1/ig; # "I saw Fred with Barney"

    7、split操作符 my @array = split /separator/, $string; my @array = split /:/, “abc:def:g:h”; # 得到(“abc”, “def”, “g”, “h”) split会保留开头处的空字段,舍弃结尾处的空字段 my @array = split /:/, “:::a:g:h:::”; # 得到(“”, “”, “”, “a”, “g”, “h”)

    8、join函数

    my $result = join $glue@pieces; 注意列表必须至少有两个元素,否则无法用胶水结合成一个字符串。$glue 必须是字符串,而不是模式。 my $result = join ":", 4,6,8; # 得到4:6:8
    转载请注明原文地址: https://ju.6miu.com/read-1299943.html
    最新回复(0)