使用Regexp :: Grammars(* COMMIT)做什么?

时间:2016-01-09 01:47:53

标签: perl

我正在寻找Regexp :: Grammars的一个例子。该示例有一个围绕* COMMIT的注释,说明它将如何改进错误消息。我找不到关于* COMMIT的任何文档。它有什么作用 ?我已经包含了以下示例的一部分:

ksh

2 个答案:

答案 0 :(得分:4)

(*COMMIT)记录在perlre

(*COMMIT)在一个分支在达到某一点后失败时导致整个交替失败很有用。

$ perl -E'
   say "$_: ", /
      ^
      (?: a (*COMMIT) b
      |   c (*COMMIT) d
      |   . z
      )
   /sx ?1:0
      for qw( ab cd az yz );
'
ab: 1
cd: 1
az: 0
yz: 1

你本可以编写以下内容,但它可能效率低得多,而且在更复杂的例子中写得难得多:

/
   ^
   (?: a b
   |   c d
   |   [^ac] z
   )
/x

答案 1 :(得分:0)

它是回溯控制动词,在perlre中描述

基本上它会强制正则表达式失败,如果模式的后期部分不匹配并且会导致正则表达式引擎回溯到它中