Embedded Parentheses (color coding for quick observation)
-
Looking for a particular use theme: embedded parenthetical groupings with unique color highlights…
Woudl this be a theme or a plugin? I’d like all parentheses to show up with a unique color for each pairing - so when i have embedded parenthetical groups within other (groups) I can quickly see where the start and end of each group is without having to click onte of the parentheses to start?
IF 0 ( ( Sequence Number NOT = “” ) AND ( Sequence Number Matches Pattern of “xx.x” ) OR (Color is Black) AND (YouDaMan(Friends+Friends)) )
-
Hello, @jason-w and All,
No need for a theme or plugin ! You can quickly see ranges of characters, with well-balanced number of parentheses, with a
recursiveregex construction !So :
-
Open the
Finddialog (Ctrl + F) -
SEARCH
\((?:[^()]++|(?0))*\) -
Un-tick all the options
-
Optionally, tick the
Wrap aroundoption -
Select the
Regular expressionsearch mode -
Click on the
Find Nextbutton
=> From the caret position, consecutive greastest ranges, even on several lines, of characters, surrounded with parentheses and possibly containing zones with well-balanced parentheses, too, should be matched !
Just play around with this regex, placing your caret, right before any opening parenthesis and hitting the
F3key
Second solution :
-
Open the Mark dialog (
Ctrl + M) -
SEARCH
\((?:[^()]++|(?0))*\) -
Un-tick all the options
-
Optionally, tick the
Wrap around -
Tick the
Purge for each searchoption -
Select the
Regular expressionsearch mode -
Click on the
Mark allbutton
=> Again, from caret position, consecutive greastest ranges, even on several lines, of characters, surrounded with parentheses and possibly containing zones with well-balanced parentheses, too, should be marked in red !
Test this recursive regex, against your example :
IF 0 ( ( Sequence Number NOT = “” ) AND ( Sequence Number Matches Pattern of “xx.x” ) OR (Color is Black) AND (YouDaMan(Friends+Friends)) )and, for instance, against this other text, on several lines :
123(456((789)(123)(45 6()789)123))456(78 9)123)456)))789(123(456((789) (123)456)789)(123((456)789)(123(4 56(789))(123)4 56(789))123Moving, each time, your cursor at some positions, right before an
(parenthesis !Best Regards,
guy038
P.S. :
I would like to show you a brief overview of the recursion process, in regular expressions, by taking a concrete example.
From the second example, above, the first match of the regex
\((?:[^()]++|(?0))*\)is the string :(456((789)(123)(45 6()789)123))that I rewrite as
(456((789)(123)(45xy6()789)123)), where x =\x0dand y =\x0aNow, let’s rewrite this string by inserting some non-significant spaces, for readability :
( 456 ( ( 789 ) ( 123 ) ( 45xy6 ( ) 789 ) 123 ) )Keep in mind that the part
(?0), in our regex, is a recursive call to the entire regex pattern. In other words,(?0)is strictly equivalent to the regex itself :\((?:[^()]++|(?0))*\)So, if we use the free-spacing mode
(?x), the regex, normally written as :(?x) \( (?: [^()]++ | (?0) )* \)could also be expressed as :
(?x) \( (?: [^()]++ | \((?:[^()]++|(?0))*\) )* \)and so on… for the same results
Thus, the string
(456((789)(123)(45xy6()789)123))can be found with the following regex elements :( 456 ( ( 789 ) ( 123 ) ( 45xy6 ( ) 789 ) 123 ) ) ( --- ---------------------------------------------------------------------------------------------------------------- ) \( [^()]{3}+ (?0) \)Which, in turn, can be rewritten as :
( 456 ( ( 789 ) ( 123 ) ( 45xy6 ( ) 789 ) 123 ) ) --- ( ---------------- ---------------- ----------------------------------------------------- --- \( [^()]{3} + \( (?0) (?0) (?0) [^()]{3}+ \) \)Which, again, can be broken down into :
( 456 ( ( 789 ) ( 123 ) ( 45xy6 ( ) 789 ) 123 ) ) --- --- --- ----- --------------------- --- --- \( [^()]{3}+ \( \( [^()]{3}+ \) \( [^()]{3}+ \) \( [^()]{5}+ (?0) [^()]{3}+ \) [^()]{3}+ \) \)And, finally, can be expressed as :
( 456 ( ( 789 ) ( 123 ) ( 45xy6 ( ) 789 ) 123 ) ) --- --- --- ----- -------------- --- --- \( [^()]{3}+ \( \( [^()]{3}+ \) \( [^()]{3}+ \) \( [^()]{5}+ \( ([^()]{1}+){0} \) [^()]{3}+ \) [^()]{3}+ \) \)
As you can see, no recursive pattern exists anymore in this final regex structure and, using the free-spacing mode
(?x), we can create the functional ( and long ! ) regex, below :(?x) \( [^()]{3}+ \( \( [^()]{3}+ \) \( [^()]{3}+ \) \( [^()]{5}+ \( ([^()]{1}+){0} \) [^()]{3}+ \) [^()]{3}+ \) \)And verify that it does match the string :
(456((789)(123)(45xy6()789)123))
So, the regex :
(?x) \( [^()]{3}+ \( \( [^()]{3}+ \) \( [^()]{3}+ \) \( [^()]{5}+ \( ([^()]{1}+){0} \) [^()]{3}+ \) [^()]{3}+ \) \)is just one example of the final non-recursive expression, resulting of the use of the recursive pattern :
(?x) \( (?: [^()]++ | (?0) )* \), once the recursion process is complete.Of course, many other combinations are possible, all expressed by this powerful and short recursive regex :-))
-
-
Here’s some related good information: https://community.notepad-plus-plus.org/post/256
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login