在Perl中,是否有一个操作符粗略地检查一个字符串以查找另一个字符串?

在Perl中,是否有一个操作符粗略地检查一个字符串以查找另一个字符串?,perl,variables,operators,Perl,Variables,Operators,我想这是一个非常简单的问题,但在谷歌搜索了20分钟后,我找不到任何解决问题的方法 所以我想检查一个字符串变量是否在它的某个地方有“OK” 我试着使用~和~~给我一个错误,~~他说不是正确的运算符是猜测。我认为~大概是这样,但似乎不是这样。这是我的密码: open (INPUT, "<", $curfile); while (<INPUT>) { $firsttenchars= substr ($_, 0, 10); if ($firsttenchars ~ "OK")

我想这是一个非常简单的问题,但在谷歌搜索了20分钟后,我找不到任何解决问题的方法

所以我想检查一个字符串变量是否在它的某个地方有“OK”

我试着使用~和~~给我一个错误,~~他说不是正确的运算符是猜测。我认为~大概是这样,但似乎不是这样。这是我的密码:

open (INPUT, "<", $curfile);
while (<INPUT>) {
$firsttenchars= substr ($_, 0, 10);
if ($firsttenchars ~ "OK") 
    {
    print "success";
    }               
}
close INPUT;

您正在寻找模式匹配

if ($firsttenchars =~ m/OK/) { ... }
如果在$firsttenchars中的某个位置发现区分大小写的文本字符串“OK”,则返回true。它不在乎多久一次,一旦找到它,它就会停止寻找

//中的内容是一个正则表达式,简称regex。这些是用来制作图案的是将标量值$firsttenchars绑定到模式匹配的。的m是匹配运算符。还有一个s//,用于用模式替换某些内容

您可以阅读,并了解更多信息。是开始使用正则表达式的极好资源

~运算符是按位求反运算符

一元~执行按位求反,即1的补码。例如,0666&~027是0640。另请参见整数算术运算符和位字符串运算符。请注意,结果的宽度取决于平台:~0在32位平台上为32位宽,但在64位平台上为64位宽,因此,如果您期望某个位宽,请记住使用&运算符屏蔽多余的位

调用~~运算符。它在Perl中已经存在了一段时间,它应该做一些聪明的事情。根据您在RHS右手侧和LHS左手侧得到的数据,它的行为有所不同。它仍然被认为是实验性的,Perl社区中的许多人发现它有争议。您将它与两个标量一起使用,它们都包含字符串。这将它转换为一个检查字符串相等性的

任何字符串相等 喜欢:任何情商

可以在中找到Perl中所有运算符的完整概述。请注意,此链接指向撰写本文时的最新版本5.24。您的Perl可能较旧,并且可能没有所有的Perl

检查字符串中是否包含“OK”的更快方法是。它返回另一个字符串中第一个出现的字符串。因为如果找不到该字符串,它将返回-1,因此需要显式检查返回值

if (index($firsttenchars, 'OK') != - 1) { ... }

这比模式匹配更需要编写,但速度要快得多。

您正在寻找模式匹配

if ($firsttenchars =~ m/OK/) { ... }
如果在$firsttenchars中的某个位置发现区分大小写的文本字符串“OK”,则返回true。它不在乎多久一次,一旦找到它,它就会停止寻找

//中的内容是一个正则表达式,简称regex。这些是用来制作图案的是将标量值$firsttenchars绑定到模式匹配的。的m是匹配运算符。还有一个s//,用于用模式替换某些内容

您可以阅读,并了解更多信息。是开始使用正则表达式的极好资源

~运算符是按位求反运算符

一元~执行按位求反,即1的补码。例如,0666&~027是0640。另请参见整数算术运算符和位字符串运算符。请注意,结果的宽度取决于平台:~0在32位平台上为32位宽,但在64位平台上为64位宽,因此,如果您期望某个位宽,请记住使用&运算符屏蔽多余的位

调用~~运算符。它在Perl中已经存在了一段时间,它应该做一些聪明的事情。根据您在RHS右手侧和LHS左手侧得到的数据,它的行为有所不同。它仍然被认为是实验性的,Perl社区中的许多人发现它有争议。您将它与两个标量一起使用,它们都包含字符串。这将它转换为一个检查字符串相等性的

任何字符串相等 喜欢:任何情商

可以在中找到Perl中所有运算符的完整概述。请注意,此链接指向撰写本文时的最新版本5.24。您的Perl可能较旧,并且可能没有所有的Perl

检查字符串中是否包含“OK”的更快方法是。它返回另一个字符串中第一个出现的字符串。因为如果找不到该字符串,它将返回-1,因此需要显式检查返回值

if (index($firsttenchars, 'OK') != - 1) { ... }

这比模式匹配更容易编写,但速度要快得多。

有效,谢谢。我真的不知道我是喜欢它这么简单,还是讨厌它,因为我无法理解它。@ZesaRex正则表达式是一个复杂的主题,但它非常强大,在Perl中非常简单。如果您对Perl相当陌生,我建议您自己
一本学习Perl的书,其中有两章是关于regex的,大约需要三到五个晚上才能完成。如果您已经了解一些编程知识,那么Ovid的入门Perl也是一个很好的资源。不要因为不知道这件事而责备自己。如果你从未听说过这样的事情存在,那么你不知道这不是你的错@ZesaRex你不能搞清楚这样的事情。需要仔细阅读:特别是regex是一个很长的遗留物-它是一个很大的黑暗魔法,从你在文本编辑器中键入命令的那一天开始。所有这些,没有提到index?工作,谢谢。我真的不知道我是喜欢它这么简单,还是讨厌它,因为我无法理解它。@ZesaRex正则表达式是一个复杂的主题,但它非常强大,在Perl中非常简单。如果您对Perl相当陌生,我建议您自己买一本学习Perl的书,这本书有两章介绍regex,大约需要三到五个晚上才能完成。如果您已经了解一些编程知识,那么Ovid的入门Perl也是一个很好的资源。不要因为不知道这件事而责备自己。如果你从未听说过这样的事情存在,那么你不知道这不是你的错@ZesaRex你不能搞清楚这样的事情。需要仔细阅读:特别是regex是一个很长的遗留物-它是一个很大的黑暗魔法,从你在文本编辑器中键入的命令开始。所有这些,没有提到索引?当我阅读标题时,我认为你想要一个模糊匹配,即ofobra而不是foobar。也许这就是为什么你很难找到你想要的,特别是如果英语不是你的母语。有时很难准确地描述一个问题。是的,这是真的,我甚至花了几分钟来写这个标题,尽管这不是我用母语问别人的。当我读标题时,我以为你想要一个模糊匹配,即ofobra而不是foobar。也许这就是为什么你很难找到你想要的,特别是如果英语不是你的母语。有时候很难准确地描述一个问题。是的,这是千真万确的,我甚至花了几分钟来写这个标题,尽管这不是我用母语问别人的问题。