regex - 何时使用相等运算符而不是绑定(bind)运算符

标签 regex perl equality

最近我对正则表达式变得友好,并使用它们非常有效地完成了许多任务。与大多数 perl 一样,TIMTOWTDI 影响了我的判断。有时我可以使用相等运算符或绑定(bind)运算符。但是,有时使用一个比另一个更合适吗?

首先是简化的情况

my $name = 'Chris';
if ($name eq 'Chris') { print 'What a great name!'; }
if ($name =~/^Chris$/) { print 'Yip sure is a great name; }

因此,在这种情况下,这是最简化的,其中使用等式减少了输入,但是在这个简化的示例中,两者都有什么好处。

在一个稍微复杂一点的例子中

my $name = 'Christopher';
if ($name eq 'Chris' || $name eq 'Christopher') { print 'What a great name!'; }
if ($name =~ /^Chris(?:topher)?$/) { print 'Yip sure is a great name; }

这里绑定(bind)运算符的输入更少。但是,我不确定其中任何一个的好处是否优于另一个。

如果您将整个字符串与固定值匹配以使用相等运算符,并且如果您将字符串与模式匹配,例如任何 5 位数字字符串 /\d{5}/ 然后使用绑定(bind)运算符。

在上面的例子中使用绑定(bind)运算符是不是不合适。我很欣赏这些例子只是编造的,可能无法反射(reflect)现实生活中的问题。然而,我想到了他们来解释我的问题。

最佳答案

however in this simplified example is there any benefit to one or the other.

嗯,它们并不等同。 /^Chris$/ 匹配 ChrisChris 后跟换行符。

如果您使用了等效的模式 (/^Chris\z/),区别将是性能。单个字符串比较将比正则表达式匹配更快。也更清晰。

对于更复杂的比较,您通常希望选择更简单、更清晰且更易于维护的方法。解决性能问题(通过使用配置文件和运行基准测试)。

关于regex - 何时使用相等运算符而不是绑定(bind)运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623096/

相关文章:

java - 匹配java中的字符串模式

Perl WWW::Mechanize::Firefox 和输入类型文件

perl - 需要解释在 Perl 中读取 "config"文件

javascript - 在 JavaScript 中测试/检查字符串的最佳实践

regex - notepad++ - 搜索包含一个字符串但不包含另一个字符串的字符串

javascript - 检查两个具有浮点值的对象是否相等?

java - 如何在 Java 中比较字符串?

interface - 在类型定义之外实现相等

javascript - 将我在 Google Analytics 中的目标 url 与正则表达式匹配

perl - 在 Perl 调试器中中断 `die`