Hi Eric,

As requested, some additional comments.

1. The time regular expression commented

    (?x)                                        (?# Allow comments and 
ignore whitespace in regex.)
    (?:                                         (?# Non-capturing OR 
opening parenthesis.)
        [01][0-9]                               (?# Double digit from 00 to 
19.)
    |                                           (?# or)
        2[0-3]                                  (?# Double digit from 20 to 
23.)
    )                                           (?# Non-capturing OR 
closing parenthesis.)
    :                                           (?# A colon.)
    [0-5][0-9]                                  (?# Double digit from 00 to 
59.)
    
This expression should match any hh:mm time from 00:00 to 23:59.

2. Commented Applescript

*tell* *application* "BBEdit"

*set* vDocument *to* *first* *text document* *of* *first* *window*

*set* vTimeRegex *to* "(?:[01][0-9]|2[0-3]):[0-5][0-9]" -- Regex to match 
any time from 00:00 to 23:59.

*set* vRegex *to* "^(" & vTimeRegex & ")-(" & vTimeRegex & 
")\\h+([A-Z]{3})" -- Regex to captures 3 informations:

-- at beginning of a line 

-- a start time to be captured

-- a colon 

-- a end time to be captured    

-- one or more horizontal spaces

-- 3 letters to be captured

*set* vOptions *to* {search mode:*grep*, starting at top:*true*, wrap around
:*false*, returning results:*true*} -- We want `find` to return a list of 
the found matches with offsets in the document.

*set* vResult *to* *find* vRegex searching in vDocument options vOptions

*log* vResult

*if* vResult's found *then* -- The find command succeeded. vResult has a 
`found matches` property that lists the matches.

*repeat* *with* vMatch *in* found matches *of* vResult -- Lets loop over 
each match and extract the captured strings.

*log* vMatch

*set* vOptions *to* {search mode:*grep*, starting at top:*true*, wrap around
:*false*, returning results:*false*} -- This time, we don't want find to 
return results because we want to extract the captured strings.

*set* vTag *to* *characters* (vMatch's start_offset) *thru* (vMatch's 
end_offset) *of* vDocument -- Create a reference to the substring we want 
to decompose by using grep substitutions.

*set* vTagMatch *to* *find* vRegex searching in vTag options vOptions -- 
Use `find` again against each substring (e.g. '08:30-11:30 UWA') to capture 
the matching parts.

*if* vTagMatch's found *then* -- This should always succeed.

*set* vStartTime *to* *grep substitution* of "\\1" -- matched by the first 
capturing parentheses: '08:30'   

*set* vEndTime *to* *grep substitution* of "\\2" -- matched by the second 
capturing parentheses: '11:30'

*set* vClientCode *to* *grep substitution* of "\\3" -- matched by the third 
capturing parentheses: 'UWA'

*log* {vStartTime:vStartTime, vEndTime:vEndTime, vClientCode:vClientCode}

*end* *if*

*end* *repeat*

*end* *if*

*end* *tell*

Best regards

Jean Jourdain
On Friday, August 18, 2023 at 5:54:58 AM UTC+2 e2o wrote:

> phew! work my way bit-by-bit through the expression 
> (?:[01][0-9]|2[0-3]):[0-5][0-9]
> and got that sorted.
>
> On Thursday, August 17, 2023 at 8:23:17 PM UTC-7 e2o wrote:
>
>> I'm also struggling with the expression:
>>
>> (?:[01][0-9]|2[0-3]):[0-5][0-9]
>>
>> On Thursday, August 17, 2023 at 8:04:20 PM UTC-7 e2o wrote:
>>
>>> JJ,
>>>
>>> I've been going over this script you sent trying to wrap my head around 
>>> it. I haven't been able to get through it completely "plain-english" in my 
>>> head yet. Could you briefly elaborate? I love the way the variables are set 
>>> to build the find. But I'm not clear on the need for repeat statement and 
>>> the overall strategy. All I know is that if I could grok this script - 
>>> which does things I find myself needing a LOT - then it could open up a 
>>> whole new world.
>>> Could you shed a bit of light for an old dog learning new tricks?
>>>
>>> Thanks!
>>>
>>> - eric
>>>
>>> On Monday, August 14, 2023 at 7:59:45 AM UTC-7 jj wrote:
>>>
>>>> Hi Eric,
>>>>
>>>> Here is an example of how to get the values captured by a regex.
>>>>
>>>> *tell* *application* "BBEdit"
>>>>
>>>> *set* vDocument *to* *first* *text document* *of* *first* *window*
>>>>
>>>> *set* vTimeRegex *to* "(?:[01][0-9]|2[0-3]):[0-5][0-9]"
>>>>
>>>> *set* vRegex *to* "^(" & vTimeRegex & ")-(" & vTimeRegex & 
>>>> ")\\h+([A-Z]{3})"
>>>>
>>>> *set* vOptions *to* {search mode:*grep*, starting at top:*true*, wrap 
>>>> around:*false*, returning results:*true*}
>>>>
>>>> *set* vResult *to* *find* vRegex searching in vDocument options 
>>>> vOptions
>>>>
>>>> *if* vResult's found *then*
>>>>
>>>> *repeat* *with* vMatch *in* found matches *of* vResult
>>>>
>>>> *log* vMatch
>>>>
>>>> *set* vOptions *to* {search mode:*grep*, starting at top:*true*, wrap 
>>>> around:*false*, returning results:*false*}
>>>>
>>>> *set* vTag *to* *characters* (vMatch's start_offset) *thru* (vMatch's 
>>>> end_offset) *of* vDocument
>>>>
>>>> *set* vTagMatch *to* *find* vRegex searching in vTag options vOptions
>>>>
>>>> *if* vTagMatch's found *then*
>>>>
>>>> *set* vStartTime *to* *grep substitution* of "\\1"
>>>>
>>>> *set* vEndTime *to* *grep substitution* of "\\2"
>>>>
>>>> *set* vClientCode *to* *grep substitution* of "\\3"
>>>>
>>>> *log* {vStartTime:vStartTime, vEndTime:vEndTime, vClientCode:
>>>> vClientCode}
>>>>
>>>> *end* *if*
>>>>
>>>> *end* *repeat*
>>>>
>>>> *end* *if*
>>>>
>>>> *end* *tell*
>>>>
>>>> HTH,
>>>>
>>>> Jean Jourdain
>>>> On Monday, August 14, 2023 at 8:23:11 AM UTC+2 Rick Gordon wrote:
>>>>
>>>>> I haven't worked with Keyboard Maestro, but what about *found text of 
>>>>> TicketTimeEntryBegin*? 
>>>>>
>>>>> On August 13, 2023 at 11:20:24 PM [-0700], E2o wrote in an email 
>>>>> entitled "Using AppleScript to find and set an AS variable collects 
>>>>> TMI (too 
>>>>> much information)": 
>>>>> > found text:08:30 
>>>>>
>>>>> ___________________________________________ 
>>>>> RICK GORDON 
>>>>> EMERALD VALLEY GRAPHICS AND CONSULTING 
>>>>> ___________________________________________ 
>>>>> WWW: http://www.shelterpub.com 
>>>>>
>>>>

-- 
This is the BBEdit Talk public discussion group. If you have a feature request 
or need technical support, please email "[email protected]" rather than 
posting here. Follow @bbedit on Twitter: <https://twitter.com/bbedit>
--- 
You received this message because you are subscribed to the Google Groups 
"BBEdit Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/bbedit/79197fb6-389b-4b1d-9432-ecacf9513465n%40googlegroups.com.

Reply via email to