- From: <bugzilla@wiggum.w3.org>
- Date: Tue, 16 Aug 2005 19:51:12 +0000
- To: public-qt-comments@w3.org
- Cc:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=1851
Summary: [F&O] back references to a group that was captured 0
times?
Product: XPath / XQuery / XSLT
Version: Last Call drafts
Platform: PC
OS/Version: Windows 2000
Status: NEW
Severity: normal
Priority: P2
Component: Functions and Operators
AssignedTo: ashok.malhotra@oracle.com
ReportedBy: fred.zemke@oracle.com
QAContact: public-qt-comments@w3.org
Section 7.6.1.1 first bullet after Rule [4] describes the semantics of
sub-expressions (frequently called capture groups in other literature on
regular expressions) in fn:replace(). The last sentence describes what
is captured by a parenthesized sub-group with a quantifier such as "*",
namely the last substring that matched.
Presumably this sentence also applies to the next bullet, about back
references, in which case this sentence is applicable to more than just
fn:replace. This should be clarified.
Assuming that this sentence does apply to back references, then I salute
you, because you have specified something that Posix and Perl neglected
to specify.
But there is still something to be specified: what if the back reference
matches a repeating group that is matched 0 times? Example:
pattern "(c)*b\1", string to be searched "abc". The (c)* must match
the zero-length string immediately before "b" in the searched string.
Then the "b" in the pattern matches the "b" in the searched string.
Now, what does the back reference \1 match? The sentence that I cited
does not answer this question, since there is no "last" match when
there are no matches at all.
My informants tell me that the intended behavior is that \1 has no match;
therefore fn:matches would return false for this example.
On the other hand, consider the pattern "((c)*)b\1" with the same string
to be searched. In this example, (c)* matches zero times, ((c)*)
matches the zero-length string one time, and consequently \1 is tasked
with matching the zero-length string, which it can do immediately
following "b" in the searched string. Consequently fn:matches would
return true.
Received on Tuesday, 16 August 2005 19:51:17 UTC