Hi Steve, What is (?s)
Can it be placed before something other than a period symbol? What does it do in that case? When it is placed before a period symbol, it means "Please consume any character, including newlines" ... is that right? /Roger -----Original Message----- From: Steve Lawrence <[email protected]> Sent: Tuesday, August 27, 2019 1:16 PM To: [email protected] Subject: [EXT] Re: Does the dollar sign mean "end of file"? The issue here is that the dot character doesn't match newlines. So your expression is essentially just looking for one or more non-newline characters up until the end of the data Your field has a newline, so the regular expression fails there, doesn't match, and results in a zero length string. If you want dot to match a newline, you can put the "(?s)" flag before the regex. You can also simplify the expression a bit. You don't need to make the dot match non-greedy, and the $ doesn't need to be in a forward lookahead. So the following should work and is a bit more compact: dfdl:lengthPattern="(?s).+$" That will match one or more characters (including newlines) up until the end of the data. On 8/27/19 12:43 PM, Costello, Roger L. wrote: > Hello DFDL community, > > My input is this: > > Hello, World Blah > Broccoli > 3ABC > > I want it parsed to this: > > <input> > <A>Hello, World</A> > <B>Blah</B> > <C>Broccoli > 3ABC</C> > </input> > > That is, the first field is exactly 12 characters. The second field > extends up to the newline. The third field is the rest. > > Below is my DFDL schema. It produces this result: > > <input> > <A>Hello, World</A> > <B>Blah</B> > <C></C> > </input> > > along with a warning message saying that a bunch of bytes remain. > > Why do I get that result instead of the desired result? /Roger > > <xs:elementname="input"> > <xs:complexType> > <xs:sequence> > <xs:elementname="A"type="xs:string" > dfdl:lengthKind="explicit" > dfdl:length="12" > dfdl:lengthUnits="characters"/> > <xs:elementname="B"type="xs:string" > dfdl:lengthKind="delimited" > dfdl:terminator="%NL;"/> > <xs:elementname="C"type="xs:string" > dfdl:lengthKind="pattern" > dfdl:lengthPattern=".+?(?=$)"/> > </xs:sequence> </xs:complexType> </xs:element> >
