From fe2df37c9f31de01430eeaf19c8861429e1ce2a4 Mon Sep 17 00:00:00 2001
From: "Philip.Hazel"
The remaining verbs act only when a later failure causes a backtrack to -reach them. This means that their effect is confined to the assertion, -because lookaround assertions are atomic. A backtrack that occurs after an -assertion is complete does not jump back into the assertion. Note in particular -that a (*MARK) name that is set in an assertion is not "seen" by an instance of -(*SKIP:NAME) latter in the pattern. +reach them. This means that, for the Perl-compatible assertions, their effect +is confined to the assertion, because Perl lookaround assertions are atomic. A +backtrack that occurs after such an assertion is complete does not jump back +into the assertion. Note in particular that a (*MARK) name that is set in an +assertion is not "seen" by an instance of (*SKIP:NAME) later in the pattern. +
++PCRE2 now supports non-atomic positive assertions, as described in the section +entitled + "Non-atomic assertions" +above. These assertions must be standalone (not used as conditions). They are +not Perl-compatible. For these assertions, a later backtrack does jump back +into the assertion, and therefore verbs such as (*COMMIT) can be triggered by +backtracks from later in the pattern.
The effect of (*THEN) is not allowed to escape beyond an assertion. If there @@ -3820,7 +3829,7 @@ Cambridge, England.
-Last updated: 13 July 2019
+Last updated: 28 July 2019
Copyright © 1997-2019 University of Cambridge.
diff --git a/doc/pcre2.txt b/doc/pcre2.txt
index 5722184..f662610 100644
--- a/doc/pcre2.txt
+++ b/doc/pcre2.txt
@@ -9439,11 +9439,19 @@ BACKTRACKING CONTROL
substrings are retained in both cases.
The remaining verbs act only when a later failure causes a backtrack to
- reach them. This means that their effect is confined to the assertion,
- because lookaround assertions are atomic. A backtrack that occurs after
- an assertion is complete does not jump back into the assertion. Note in
- particular that a (*MARK) name that is set in an assertion is not
- "seen" by an instance of (*SKIP:NAME) latter in the pattern.
+ reach them. This means that, for the Perl-compatible assertions, their
+ effect is confined to the assertion, because Perl lookaround assertions
+ are atomic. A backtrack that occurs after such an assertion is complete
+ does not jump back into the assertion. Note in particular that a
+ (*MARK) name that is set in an assertion is not "seen" by an instance
+ of (*SKIP:NAME) later in the pattern.
+
+ PCRE2 now supports non-atomic positive assertions, as described in the
+ section entitled "Non-atomic assertions" above. These assertions must
+ be standalone (not used as conditions). They are not Perl-compatible.
+ For these assertions, a later backtrack does jump back into the asser-
+ tion, and therefore verbs such as (*COMMIT) can be triggered by back-
+ tracks from later in the pattern.
The effect of (*THEN) is not allowed to escape beyond an assertion. If
there are no more branches to try, (*THEN) causes a positive assertion
@@ -9494,7 +9502,7 @@ AUTHOR
REVISION
- Last updated: 13 July 2019
+ Last updated: 28 July 2019
Copyright (c) 1997-2019 University of Cambridge.
------------------------------------------------------------------------------
diff --git a/doc/pcre2pattern.3 b/doc/pcre2pattern.3
index d59ac9f..8e79d56 100644
--- a/doc/pcre2pattern.3
+++ b/doc/pcre2pattern.3
@@ -1,4 +1,4 @@
-.TH PCRE2PATTERN 3 "13 July 2019" "PCRE2 10.34"
+.TH PCRE2PATTERN 3 "28 July 2019" "PCRE2 10.34"
.SH NAME
PCRE2 - Perl-compatible regular expressions (revised API)
.SH "PCRE2 REGULAR EXPRESSION DETAILS"
@@ -3796,11 +3796,22 @@ a positive assertion and false for a negative one; captured substrings are
retained in both cases.
.P
The remaining verbs act only when a later failure causes a backtrack to
-reach them. This means that their effect is confined to the assertion,
-because lookaround assertions are atomic. A backtrack that occurs after an
-assertion is complete does not jump back into the assertion. Note in particular
-that a (*MARK) name that is set in an assertion is not "seen" by an instance of
-(*SKIP:NAME) latter in the pattern.
+reach them. This means that, for the Perl-compatible assertions, their effect
+is confined to the assertion, because Perl lookaround assertions are atomic. A
+backtrack that occurs after such an assertion is complete does not jump back
+into the assertion. Note in particular that a (*MARK) name that is set in an
+assertion is not "seen" by an instance of (*SKIP:NAME) later in the pattern.
+.P
+PCRE2 now supports non-atomic positive assertions, as described in the section
+entitled
+.\" HTML
+.\"
+"Non-atomic assertions"
+.\"
+above. These assertions must be standalone (not used as conditions). They are
+not Perl-compatible. For these assertions, a later backtrack does jump back
+into the assertion, and therefore verbs such as (*COMMIT) can be triggered by
+backtracks from later in the pattern.
.P
The effect of (*THEN) is not allowed to escape beyond an assertion. If there
are no more branches to try, (*THEN) causes a positive assertion to be false,
@@ -3859,6 +3870,6 @@ Cambridge, England.
.rs
.sp
.nf
-Last updated: 13 July 2019
+Last updated: 28 July 2019
Copyright (c) 1997-2019 University of Cambridge.
.fi
diff --git a/testdata/testinput2 b/testdata/testinput2
index 16c03c9..7eeee53 100644
--- a/testdata/testinput2
+++ b/testdata/testinput2
@@ -5688,6 +5688,21 @@ a)"xI
/(*napla:abc|abd)/I
+/(*napla:a|(.)(*ACCEPT)zz)\1../
+ abcd
+
+/(*napla:a(*ACCEPT)zz|(.))\1../
+ abcd
+
+/(*napla:a|(*COMMIT)(.))\1\1/
+ aabc
+\= Expect no match
+ abbc
+
+/(*napla:a|(.))\1\1/
+ aabc
+ abbc
+
# ----
# Expect error (recursion => not fixed length)
diff --git a/testdata/testoutput2 b/testdata/testoutput2
index 5fb1d7f..ac4e738 100644
--- a/testdata/testoutput2
+++ b/testdata/testoutput2
@@ -17185,6 +17185,32 @@ May match empty string
First code unit = 'a'
Subject length lower bound = 1
+/(*napla:a|(.)(*ACCEPT)zz)\1../
+ abcd
+ 0: abc
+ 1: a
+
+/(*napla:a(*ACCEPT)zz|(.))\1../
+ abcd
+ 0: bcd
+ 1: b
+
+/(*napla:a|(*COMMIT)(.))\1\1/
+ aabc
+ 0: aa
+ 1: a
+\= Expect no match
+ abbc
+No match
+
+/(*napla:a|(.))\1\1/
+ aabc
+ 0: aa
+ 1: a
+ abbc
+ 0: bb
+ 1: b
+
# ----
# Expect error (recursion => not fixed length)