Thank you much, Spencer and Paul. This was very helpful and got me rolling
again. I've got some re-work and cleanup to do, but will post my final
working logic here.
Cheers,
Jim

On Sun, Jul 9, 2023 at 7:58 PM Paul King <pa...@asert.com.au> wrote:

> Yes, Spencer's info is correct. This script gives an example for a date in
> dd-mm-yy[yy] format:
>
> candidate = '14-06-2023'
> matcher = candidate =~ /(?x) # enable whitespace and comments
>   ^                          # start of line
>   (0?[1-9]|[12]\d|3[01])     # capture day, e.g. 1, 01, 12, 30
>   [\-\/]+                    # ignore separator
>   (\d{1,2})                  # capture month, e.g. 1, 01, 12
>   [\-\/]+                    # ignore separator
>   (\d{4}|\d{2})              # capture year, e.g. 1975, 23
>   $                          # end of line
> /
> (_, day, month, year) = matcher[0]
> assert [year, month, day] == ['2023', '06', '14']
>
> You'd need a slight tweak to instead/also handle USA dates in mm-dd-yy[yy]
> format.
>
> Cheers, Paul.
>
>
> On Mon, Jul 10, 2023 at 6:53 AM Spencer Allain via users <
> users@groovy.apache.org> wrote:
>
>> You have changed the first grouping into a non-capture group with ?:, so
>> matcher[0][3] will be null, and matcher[0][1] will be the month and
>> matcher[0][2] will be the year.
>>
>> I also believe that you should be able to reduce [\\\-\\\/] to be simply
>> [-\/] because of using slashy-string for the regex (as only forward slash
>> needs to be escaped)
>>
>> -Spencer
>>
>> On Sunday, July 9, 2023 at 12:08:17 PM EDT, James McMahon <
>> jsmcmah...@gmail.com> wrote:
>>
>>
>> Correction: this is my code...
>>
>> else if ( candidate =~
>> /^(?:0?[1-9]|[12]\d|3[01])[\\\-\\\/]+(\d{2}|\d{1})[\\\-\\\/]+(\d{4}|\d{2})$/
>> ) {
>>
>>               log.error("BINGO!")
>>
>>               matcher = candidate =~
>> /^(?:0?[1-9]|[12]\d|3[01])[\\\-\\\/]+(\d{2}|\d{1})[\\\-\\\/]+(\d{4}|\d{2})$/
>>               matchedSubstring = matcher[0][0]
>>               log.error("Matcher: ${matcher.toString()}")
>>               log.error("Matched substring: ${matchedSubstring}")
>>               day = matchedSubstring[matcher[0][1]]
>>               month = matchedSubstring[matcher[0][2]]
>>               year = matcherSubstriong[matcher[0][3]]
>>
>>               log.error("Day: ${day}")
>>               log.error("Month: ${month}")
>>               log.error("Year: ${year}")
>>
>>               log.error("Length of Day: ${day.length()}")
>>               log.error("Length of Month: ${month.length()}")
>>               log.error("Length of Year: ${year.length()}")
>>
>>            }
>>
>> I suspect I need to look at how I'm setting day, month, and year from
>> matcher.
>>
>> The log output:
>> 2023-07-09 16:04:47,406 ERROR [Timer-Driven Process Thread-10]
>> o.a.nifi.processors.script.ExecuteScript
>> ExecuteScript[id=33a5179c-1df4-128b-52be-aaa96b947012] Candidate: 06-14-2023
>> 2023-07-09 16:04:47,406 ERROR [Timer-Driven Process Thread-10]
>> o.a.nifi.processors.script.ExecuteScript
>> ExecuteScript[id=33a5179c-1df4-128b-52be-aaa96b947012] BINGO!
>> 2023-07-09 16:04:47,406 ERROR [Timer-Driven Process Thread-10]
>> o.a.nifi.processors.script.ExecuteScript
>> ExecuteScript[id=33a5179c-1df4-128b-52be-aaa96b947012] Matcher:
>> java.util.regex.Matcher[pattern=^(?:0?[1-9]|[12]\d|3[01])[\\\-\\/]+(\d{2}|\d{1})[\\\-\\/]+(\d{4}|\d{2})$
>> region=0,10 lastmatch=06-14-2023]
>> 2023-07-09 16:04:47,406 ERROR [Timer-Driven Process Thread-10]
>> o.a.nifi.processors.script.ExecuteScript
>> ExecuteScript[id=33a5179c-1df4-128b-52be-aaa96b947012] Matched substring:
>> 06-14-2023
>> 2023-07-09 16:04:47,406 ERROR [Timer-Driven Process Thread-10]
>> o.a.nifi.processors.script.ExecuteScript
>> ExecuteScript[id=33a5179c-1df4-128b-52be-aaa96b947012] Could not parse:
>> 06-14-2023
>>
>> On Sun, Jul 9, 2023 at 11:59 AM James McMahon <jsmcmah...@gmail.com>
>> wrote:
>>
>> Hello. I have a conditional clause in my Groovy script that attempts to
>> parse a date pattern of this form: 06-14-2023. It fails - I believe in the
>> matcher.
>>
>> I am running from a NiFi ExecuteScript processor. Here is my conditional:
>>
>>               } else if ( candidate =~
>> /^(?:0?[1-9]|[12]\d|3[01])[\\\-\\\/]+(\d{2}|\d{1})[\\\-\\\/]+(\d{4}|\d{2})$/
>> ) {
>>
>>               log.error("BINGO!")
>>
>>               matcher = candidate =~
>> /^(?:0?[1-9]|[12]\d|3[01])[\\\-\\\/]+(\d{2}|\d{1})[\\\-\\\/]+(\d{4}|\d{2})$/
>>               log.error("Matcher: ${matcher.toString()}")
>>               log.error("Matched substring: ${matchedSubstring}")
>>               day = matchedSubstring[matcher[0][1]]
>>               month = matchedSubstring[matcher[0][2]]
>>               year = matcherSubstriong[matcher[0][3]]
>>
>>               log.error("Day: ${day}")
>>               log.error("Month: ${month}")
>>               log.error("Year: ${year}")
>>
>>               log.error("Length of Day: ${day.length()}")
>>               log.error("Length of Month: ${month.length()}")
>>               log.error("Length of Year: ${year.length()}")
>>
>>            }
>>
>> My log output tells me I make it into the conditional, but then I fail on
>> the matcher:
>>
>> 2023-07-09 15:52:23,547 ERROR [Timer-Driven Process Thread-2]
>> o.a.nifi.processors.script.ExecuteScript
>> ExecuteScript[id=33a5179c-1df4-128b-52be-aaa96b947012] Candidate: 06-14-2023
>> 2023-07-09 15:52:23,547 ERROR [Timer-Driven Process Thread-2]
>> o.a.nifi.processors.script.ExecuteScript
>> ExecuteScript[id=33a5179c-1df4-128b-52be-aaa96b947012] BINGO!
>> 2023-07-09 15:52:23,547 ERROR [Timer-Driven Process Thread-2]
>> o.a.nifi.processors.script.ExecuteScript
>> ExecuteScript[id=33a5179c-1df4-128b-52be-aaa96b947012] Matcher:
>> java.util.regex.Matcher[pattern=^(?:0?[1-9]|[12]\d|3[01])[\\\-\\/]+(\d{2}|\d{1})[\\\-\\/]+(\d{4}|\d{2})$
>> region=0,10 lastmatch=]
>> 2023-07-09 15:52:23,547 ERROR [Timer-Driven Process Thread-2]
>> o.a.nifi.processors.script.ExecuteScript
>> ExecuteScript[id=33a5179c-1df4-128b-52be-aaa96b947012] Matched substring:
>> *null*
>> 2023-07-09 15:52:23,547 ERROR [Timer-Driven Process Thread-2]
>> o.a.nifi.processors.script.ExecuteScript
>> ExecuteScript[id=33a5179c-1df4-128b-52be-aaa96b947012] Could not parse:
>> 06-14-2023
>>
>> Can anyone help me get this matcher to work?
>>
>> Thanks in advance for any help.
>>
>> Jim
>>
>>

Reply via email to