Mastering Expression Evaluation in EmEditor: Clarifying Truth From Falsity for Enhanced Coding
Mastering Expression Evaluation in EmEditor: Clarifying Truth From Falsity for Enhanced Coding
Viewing 7 posts - 1 through 7 (of 7 total)
- Author
Posts October 14, 2011 at 6:51 am #9732
Stefan
Participant
How can i utilize this feature please?
(?n:true_expression:false_expression)
Found at:
http://www.emeditor.com/modules/feature1/rewrite/tc_35.html
EmEditor Professional 9 New Features
The replace format “(?n:true_expression:false_expression)”
was added to regular expression replace formats.
October 17, 2011 at 8:10 pm #9741
JohnQSmith
Participant
I played with it a while and finally figured it out. Here’s an example.
Input document
TheGreenAile TheGreenBile TheGreenCile TheGreenDile
TheGreenEile TheGreenFile TheGreenGile TheGreenHile
TheGreenIile TheGreenJile TheGreenKile TheGreenLile
TheGreenNile TheGreenOile TheGreenPile TheGreenQile
TheGreenRile TheGreenSile TheGreenUile TheGreenVile
TheGreenWile TheGreenXile TheGreenYile TheGreenZile
Search string
(?:([BFNPR])|([^BFNPR]))(ile)
Replace string
(?1:M:T)3
Replace all and output is
TheGreenTile TheGreenMile TheGreenTile TheGreenTile
TheGreenTile TheGreenMile TheGreenTile TheGreenTile
TheGreenTile TheGreenTile TheGreenTile TheGreenTile
TheGreenMile TheGreenTile TheGreenMile TheGreenTile
TheGreenMile TheGreenTile TheGreenTile TheGreenTile
TheGreenTile TheGreenTile TheGreenTile TheGreenTile
I color coded it to help you see what’s happening.
Oh yeah, the Boost regex docs helped me figure it out.
October 18, 2011 at 5:46 am #9742
Stefan
Participant
Thanks John!
I see it, but i don’t understand it.
Will have an closer look and read the Boost help…
October 18, 2011 at 7:18 am #9743
Stefan
Participant
> Conditionals
> The character ‘?’ begins a conditional expression, the general form is:
> ?Ntrue-expression:false-expression
> where N is decimal digit.
> If sub-expression N was matched, then true-expression is evaluated and sent to output,
> otherwise false-expression is evaluated and sent to output.
> You will normally need to surround a conditional-expression with parenthesis in order to prevent ambiguities.
> For example, the format string “(?1foo:bar)” will replace each match found with “foo” if the sub-expression $1 was matched,
> and with “bar” otherwise.
> For sub-expressions with an index greater than 9, or for access to named sub-expressions use:
> ?{INDEX}true-expression:false-expression
> or
> ?{NAME}true-expression:false-expression
>
> conditional expression ?Ntrue-expression:false-expression
>
> In addition, conditional expressions of the following form are recognized:
> ?Ntrue-expression:false-expression
> where N is a decimal digit representing a sub-match.
> If the corresponding sub-match participated in the full match, then the substitution is true-expression.
> Otherwise, it is false-expression. In this mode, you can use parens () for grouping.
> If you want a literal paren, you must escape it as (.
Seams clear, but i have still problems using this.
Some tests:
conditional expression
‘?Ntrue-expression:false-expression’ test 1
I have:
Test Price 1000
Test Price 100
Test Price 800Find: (.+) (.+) (d{3})(d)
Replace: (?4: too expensive: affordable)
[X] Use RegExResult:
Test Price 1000 too expensive
Test Price 100
Test Price 800Expected:
Test Price 1000 too expensive
Test Price 100 affordable
Test Price 800 affordableExplanation:
If sub-expression No. 4 match THEN
use ‘true-expression’
else ‘false-expression’
conditional expression
‘?Ntrue-expression:false-expression’ test 2
I have:
Color 1 green
Color 2 blue
Color 3 red
The available colors are either green, blue or red.Find: (Color d) (.+)
Replace: (?1:1 2-ich:1 -2-)
[X] Use RegExResult:
Color 1 green-ich
Color 2 blue-ich
Color 3 red-ich
The available colors are either green, blue or red.Expected:
Explanation:
Color 1 green-ich
Color 2 blue-ich
Color 3 red-ich
The available colors are either -green-, -blue- or -red-.
Only if sub-expression No. 1 will match THEN
use ‘true-expression’
else ‘false-expression’
OK, i will test some more.
October 18, 2011 at 2:39 pm #9744
JohnQSmith
Participant
I see the problem with both of your tests. It’s the same thing that took me so long to figure out how it works.
Here’s the key…
The whole RegEx must match in order for it to work. In other words, you have to set up the RegEx with an alternation so that it has both a success and a failure point.
In your first test, only the first line matched your RegEx (I’m using underscores as filler to demonstrate).
Test Price 100______0
(.+) (.+) (d{3}) (d) <-- this matches
Test Price 100________
(.+) (.+) (d{3}) (d) <-- this doesn't match, there is no final (d)
Test Price 800________
(.+) (.+) (d{3}) (d) <-- also doesn't match
Here’s how I changed your RegEx to work.
Note the success ----. and failure points
| |
v v
Find: ^(.+) (.+) (d{3})(?:(d)|$)
Replace: (?4:too expensive:affordable)
Your second example is the same thing.
Color_ 1__ green
(Color d) (.+) <-- match
Color_ 2__ blue
(Color d) (.+) <-- match
Color_ 3__ red
(Color d) (.+) <-- match
The available colors are either green, blue or red.
(Color d) (.+) <-- no match anywhere on line
Hope this helps.
October 18, 2011 at 6:12 pm #9745
Stefan
Participant
Thank you.
My understanding right now:
You have to set up the FIND RegEx with an alternation so that it has both a success and a failure point.
As the REPLACE have too possibilities too: (?n:true_expression:false_expression)
Test:
I have:
Test Price 1000
Test Price 100
Test Price 800
Find: (.+) (.+) (d{3})(d)*
Repl: (?4: too expensive: affordable)
[X] Use RegEx
Result:
Test Price 1000 too expensive
Test Price 100 affordable
Test Price 800 affordable
Thanks again. I still have to do some test, but i think you showed me the way.
–
BTW, good idea :lol: of you:
Replace: (?4:too expensive:affordable)
–
October 18, 2011 at 6:39 pm #9746
JohnQSmith
Participant
My understanding right now:
You have to set up the FIND RegEx with an alternation so that it has both a success and a failure point.
As the REPLACE have too possibilities too: (?n:true_expression:false_expression)
Absolutely correct. I like your FIND RegEx better. It will be much easier to use than mine. Just adding the zero or more switch makes it much simpler than a non-matching alternation grouping.
What helped me the most in figuring out how it works was how EmEditor highlights all matches when you do a search. When I tried your first search, only the first “Test Price” line was highlighted, but when I removed the final “(d)”, all the lines were marked. This showed me that the problem was with the RegEx.
The first and foremost thing to remember is that the WHOLE RegEx expression must match before you can do any further matching and testing with a SUBexpression.
BTW, good idea :lol: of you:
Replace: (?4:too expensive:affordable)
Thanks! :-D
- Author
Posts
Viewing 7 posts - 1 through 7 (of 7 total)
- You must be logged in to reply to this topic.
Also read:
- [New] Mastering the Art of Cinematic Content on Instagram
- [Updated] 2024 Approved The Editor's Pathway for Diminishing Sound Levels
- [Updated] A Compre Market Leader's Guide to the Most Effective FB Video Ad Approaches for 2024
- [Updated] Deep Dive Into The Best Ways to Speed Up Facebook Videos
- [Updated] Perfecting Small Details on Google Meet Screen
- A Step-by-Step Guide: Viewing Your FlipBooks Anywhere with Mobile Compatibility - flipbuilder.com
- Adjusting FlipBuilder's Bottom Menu Hue: A Comprehensive Tutorial
- Best of the Best #10 Recorders for Your Device for 2024
- Getting Acquainted The Google Meet Pathway for 2024
- How To Fix Part of the Touch Screen Not Working on Samsung Galaxy S23 FE | Dr.fone
- Step-by-Step Guide to Upload and Modify Your Design on FlipProgram (flipbuilder.com)
- Transform PDF & Various Image Formats Into Stunning Android Books with FlipBuilder
- Title: Mastering Expression Evaluation in EmEditor: Clarifying Truth From Falsity for Enhanced Coding
- Author: Steven
- Created at : 2024-10-05 21:15:25
- Updated at : 2024-10-10 18:24:52
- Link: https://win-webster.techidaily.com/mastering-expression-evaluation-in-emeditor-clarifying-truth-from-falsity-for-enhanced-coding/
- License: This work is licensed under CC BY-NC-SA 4.0.