最近在Perl和Ruby中听到过有关正则表达式的触发器的阅读,但是我无法找到它们的工作原理,以及常见的用例.
任何人都可以用语言无关的方式解释这个问题吗?
现在我明白了它是什么,它是如何工作的,我会把这个问题简单地说一下:什么是触发器操作符?
解决方法
当左操作数为真时,Perl中的触发器操作符将计算为真,并保持评估为true,直到正确的操作数为真.左右操作数可以是任何形式的表达式,但大多数情况下,它与正则表达式一起使用.
使用正则表达式,它可用于查找两个标记之间的所有行.这是一个简单的例子,显示它是如何工作的:
use Modern::Perl; while (<DATA>) { if (/start/ .. /end/) { say "flip flop true: $_"; } else { say "flip flop false: $_"; } } __DATA__ foo bar start inside blah this is the end baz
触发器操作符对于从开始到结束的所有行都将是真实的.
运算符的两点版本允许在同一行上匹配第一个和第二个正则表达式.所以,如果你的数据看起来像这样,上面的程序将只是对于线开始blah结束:
foo bar start blah end inside blah this is the end baz
如果您不希望第一个和第二个正则表达式匹配相同的行,则可以使用三点版本:if(/ start / … / end /).
请注意,应注意不要将触发器运算符与范围运算符混淆.在列表上下文中,..有一个完全不同的功能:它返回一个顺序值的列表.例如
my @integers = 1 .. 1000; #makes an array of integers from 1 to 1000.
我不熟悉Ruby,但Lee Jarvis’s link表示它的工作原理类似.