Hi Howard,

Here is a commented version of your regular expression.

(?x)        (?# Allow whitespace and comments.                             
 )
(           (?# Opening of capture 1.                                       
)
    .       (?# Any single character.                                       
)
)           (?# Closing of capture  1.                                     
 )
(?!         (?# Opening negative lookahead assertion.                       
)
    [^(]*   (?# Zero or more characters that are not a opening parenthesis. 
)
    \)      (?# A closing parenthesis.                                     
 )
)           (?# Closing negative lookahead assertion.                       
)

(?!...) is a Negative lookahead assertion.
It basically says: find occurrences of 'this' that are not followed by 
'that' but don't include the 'not that' in the match –– hence the 
'lookahead'.

For a detailed explanation check the *excellent* grep documentation in *menu 
Help > BBEdit Help > Grep Reference* link.

So that says:
"Any single character that is not followed by zero or more characters that 
are not the opening parenthesis, followed by a closing parenthesis."

The double negation makes it difficult to fathom.

The negative lookahead assertion says: skip any match that is followed by 
'...)' where ... are zero of more not '('.
The digits of the first line are not followed by '...)' -> match.
The first character of the second line '(' is followed by '10)' -> skip
The second character of the second line '1' is followed by '0)' -> skip
The third character of the second line '0' is followed by ')' -> skip
The fourth character of the second line ')' is not followed by '...)' -> 
match
...

A simpler regular expression that will give the same result (and probably 
be more performant) is:

(\([^\)]*\)|\d)

"Match any parentheses block or any single digits outside of parentheses 
blocks."

HTH

Jean Jourdain


On Saturday, July 31, 2021 at 6:52:48 PM UTC+2 TJ Luoma wrote:

>
> Try pasting it into https://regexr.com
>
> That's what I usually use to translate regex into English :-)
>
>
>
> On Sat, Jul 31, 2021 at 10:20 AM Howard <[email protected]> wrote:
>
>> Can someone explain how the REGEX code below works? 
>> *(.)(?![^(]*\))*
>>
>> I know it looks for digits, including two-digit numbers in parentheses, 
>> and extracts them and inserts a space after each one, but I do not know how 
>> the code starting with *(?* works.
>>
>> Here is sample data for it:
>> 010000000
>> (10)1140006x
>> 002200010
>> 00000(11)01x
>> 311200
>>
>> Here is output:
>> 0 1 0 0 0 0 0 0 0 
>> (10) 1 1 4 0 0 0 6 x 
>> 0 0 2 2 0 0 0 1 0 
>> 0 0 0 0 0 (11) 0 1 x 
>> 3 1 1 2 0 0 
>>
>>
>> -- 
>> 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/aa2c7738-44c7-4d75-b64e-7cf2655ffb4an%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/bbedit/aa2c7738-44c7-4d75-b64e-7cf2655ffb4an%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
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/7e7af839-de6e-4312-88f1-c6e8d8ec78f2n%40googlegroups.com.

Reply via email to