Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 试图理解这个s/\r?\n$//perl正则表达式_Regex_Perl - Fatal编程技术网

Regex 试图理解这个s/\r?\n$//perl正则表达式

Regex 试图理解这个s/\r?\n$//perl正则表达式,regex,perl,Regex,Perl,献给所有perl大师!我有下面的代码片段,其中有一行是我试图理解的。一直在阅读并设法理解这是一个perl正则表达式。但是,我一直无法理解每个人都在做什么。如果我将要说的话有错,请纠正我 此特定部分用于从十六进制文件中读取EDID内容。我相信前一个家伙想做的就是去掉任何空格和下一行。但不完全确定 for (my $int=1;$int<9;$int++){ my $line = <$info>; $line =~ s/\r?\n$//; chomp $line; $line =~

献给所有perl大师!我有下面的代码片段,其中有一行是我试图理解的。一直在阅读并设法理解这是一个perl正则表达式。但是,我一直无法理解每个人都在做什么。如果我将要说的话有错,请纠正我

此特定部分用于从十六进制文件中读取EDID内容。我相信前一个家伙想做的就是去掉任何空格和下一行。但不完全确定

for (my $int=1;$int<9;$int++){
my $line = <$info>;
$line =~ s/\r?\n$//;
chomp $line;
$line =~ s/\s+//g;
if ( $line eq "00000000000000000000000000000000" ){ 
    print "bad EDID information in file $file --- all 0's\r\n";
    close $info;
    close $OUTFILE;
    exit 1;
}


print $OUTFILE $line
}

我想了解的是。。。什么是s/\r\n$//正在执行。我相信\n是下一行。但不确定其他的。欢迎您提供任何意见或帮助。

如果您还不知道,
s//
是替换运算符

该模式匹配可选的回车符,后跟换行符序列和字符串结尾

\r?  # '\r' (carriage return) (optional)
\n   # '\n' (newline)
 $   # before an optional \n, and the end of the string

如果您还不知道,
s//
是替换运算符

该模式匹配可选的回车符,后跟换行符序列和字符串结尾

\r?  # '\r' (carriage return) (optional)
\n   # '\n' (newline)
 $   # before an optional \n, and the end of the string
事实上是正确的,它不能解释为什么这个正则表达式存在

。该正则表达式删除了这两种类型,以确保无论是哪种类型的机器生成了该文件,还是哪种类型正在读取该文件,它都能正常工作

Windows和许多Internet协议使用回车符(ASCII 015)和换行符(ASCII 012);这来自于。Unix只使用换行符(ASCII 012)。正则表达式中的回车是
\r
\015
。换行符(又称换行符)是
\n
\012

$
是多余的,换行符将位于行的末尾,可能应该删除

呼叫是多余的
chomp
将删除当前操作系统中该类型的换行符。在Unix上它将删除
\n
,在Windows上它将删除
\r\n
(实际上它将删除
$/
的值)。但是,如果在Unix计算机上使用Windows文件,或者在Unix计算机上使用Windows文件,则该文件将无法适应文件类型。正则表达式更安全

$line=~s/\s+//g
使用
/g
尽可能多次匹配,删除行中任何位置的所有空白。由于回车符和换行符是空白,这使得
chomp
s/\r?\n$/
都是多余的

所有三行都可以简化为
$line=~s{\s+}{}g

事实上是正确的,它不能解释为什么会有这个正则表达式

。该正则表达式删除了这两种类型,以确保无论是哪种类型的机器生成了该文件,还是哪种类型正在读取该文件,它都能正常工作

Windows和许多Internet协议使用回车符(ASCII 015)和换行符(ASCII 012);这来自于。Unix只使用换行符(ASCII 012)。正则表达式中的回车是
\r
\015
。换行符(又称换行符)是
\n
\012

$
是多余的,换行符将位于行的末尾,可能应该删除

呼叫是多余的
chomp
将删除当前操作系统中该类型的换行符。在Unix上它将删除
\n
,在Windows上它将删除
\r\n
(实际上它将删除
$/
的值)。但是,如果在Unix计算机上使用Windows文件,或者在Unix计算机上使用Windows文件,则该文件将无法适应文件类型。正则表达式更安全

$line=~s/\s+//g
使用
/g
尽可能多次匹配,删除行中任何位置的所有空白。由于回车符和换行符是空白,这使得
chomp
s/\r?\n$/
都是多余的


这三行代码都可以简化为
$line=~s{\s+}{}{}g

您的前任已经编写了一个相当于
chomp
的代码,它可以在Windows和Linux文本文件上运行。前者有CR-LF行结尾
“\r\n”
,后者只有LF
“\n”

如果您对尾随的制表符或空格不感兴趣,那么写这篇文章的更好方法是
s/\s+$/
,因为CR和LF都是“空白”

更好的是,如果您可以保证您运行的是10版或更高版本的Perl5(将
使用5.010
放在程序顶部),那么将是
s/\s+\z/


或者,如果您希望保留尾随空格但删除行终止符,
s/[\r\n]+\z/
将为您完成此操作,并且还将处理老式的Mac文本文件,最后是CR。

您的前任编写了一个相当于chomp的程序,用于Windows和Linux文本文件。前者有CR-LF行结尾
“\r\n”
,后者只有LF
“\n”

如果您对尾随的制表符或空格不感兴趣,那么写这篇文章的更好方法是
s/\s+$/
,因为CR和LF都是“空白”

更好的是,如果您可以保证您运行的是10版或更高版本的Perl5(将
使用5.010
放在程序顶部),那么将是
s/\s+\z/


或者,如果您想保留尾随空格,但删除行终止符,
s/[\r\n]+\z/
将为您完成此操作,并且还将处理旧式Mac文本文件,这些文件的末尾只有CR。

让我直说吧。如果我在任何时候都错了,请务必纠正我。s///是替换运算符。那么,他们使用了\r\n?以及\n和add$以指示字符串的结尾。这被添加到替换操作符的第一个槽中。s/(在这里)//让我说清楚。如果我在任何时候都错了,请务必纠正我。s///是替换运算符。那么,他们使用了\r\n?以及\n和add$以指示字符串的结尾。和t