如何在正则表达式中匹配"/*"?

Nan*_* HE 4 regex perl

$stuff = "d:/learning/perl/tmp.txt";

open STUFF, $stuff or die "Cannot open $stuff for read :$!";
while (<STUFF>) {
    my($line) = $_; # Good practice to always strip the trailing
    chomp($line);
    my @values = split(' ', $line);

    foreach my $val (@values) {

        if ($val == 1){
            print "1 found";    
        }
        elsif ($val =~ /hello/){
            print "hello found";    
        }
        elsif ($val =~ /"/*"/){ # I don't know how to handle here.
            print "/* found";    
        }
        print "\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

我的tmp.txt:

/* CheerStone ColdStunner 

1 Cheer Rock

hello Boo Pedigree
Run Code Online (Sandbox Code Playgroud)

如何处理/*代码中的字符序列?

Ala*_*avi 16

*是一个特殊的角色.所以,你必须逃脱它:

m{/\*}
Run Code Online (Sandbox Code Playgroud)

正如Adam Bellaire建议的那样,这里有一个简短的解释:

最好避免使用栅栏.为此,有时除了/必须使用之外的分隔符.m在使用这样的分隔符时,应该在第一个分隔符之前.如果任何括号用作第一个分隔符,则必须使用相应的右括号作为结束分隔符.

  • 您还使用了除了匹配运算符以外的分隔符,这绝对是最佳选择,但您应该在答案中解释这一点.我不认为OP知道你可以做到这一点. (3认同)
  • 这不只是OP ...有很多人使用Perl,他们不知道你能做到这一点. (2认同)

bri*_*foy 12

un-meta正则表达式元字符有多种方法.在您的情况下,您需要处理作为默认分隔符的字符以及元字符.


Luk*_*ský 8

这两个字符在Perl正则表达式中都有特殊含义,因此您必须使用反斜杠转义它们:

$val =~ /\/\*/
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你应该^在所有的正则表达式之前添加,因为你似乎只想在行的开头处理文本.

  • 尽量避免使用"picket-fence"以获得更好的代码可读性. (2认同)