Perl Regex Conditional:嵌入代码中的命名组

时间:2015-03-31 13:52:57

标签: regex perl

我是Perl的初学者,但我确实了解正则表达式。

现在我遇到了问题,因为我不知道我应该用Perl做我想要的语法。

在RE I' m制作中,我需要命名一个组(仅由一个字符组成),然后在嵌入代码中使用它来查看该字符是否等于' a'例如,如果是if语句应该用于匹配我想要的...

我认为语法是这样的:

(echo base; echo case;) | perl -ne 'print if /^ *(?<char>[^*\/#" ])(?(?{<char> eq c})ase)/'

在此示例中,我想匹配字符串大小写,但它匹配任何字符,后跟 ase (如 base ,在例)。这真是令人沮丧......

任何有更多Perl经验的人都能告诉我正确的方法吗?

非常感谢!

编辑:在示例中,我想评估组 char 。它应该只匹配 char ==&#39; c&#39;如果这是真的,那么&#39; ase&#39;将用作条件的IF语句,因此匹配情况,但不是基数...

2 个答案:

答案 0 :(得分:1)

您无法使用(?{ code })更改匹配结果,因为它永远不会为假(perlre):

  

此零宽度断言评估任何嵌入的Perl代码。它总是成功,[...]

答案 1 :(得分:0)

嗯,我想嵌入的if-then-else语句如下所示。

(echo qwert; echo base; echo case;) | perl -ne 'print if /^ *(?<char>[^*\/#" ])(?(?{$+{char} eq c})ase|_x_x_x_)/'

此命令仅匹配单词案例,并将 qwert base 保留。

我还必须添加一个永远不会匹配的else语句,我能够按预期评估命名组 char 的内容。