- AuthorPosts
- October 13, 2011 at 10:57 pm #9730DeipotentParticipant
If you have a line with the text:
10,6,3,12
and do a regex Find for
,(d),
and replace with
,01,
you have to do Replace All twice. The first time will result in
10,06,3,12
The second pass changes “,3,” to “,03,”.
Why is the “,3,” not done in the first pass ?
Is this a bug ?
October 14, 2011 at 8:01 am #9733StefanParticipant.
Hi :-)
Me thinks that is how the regex engine works?
You search “,d,” on an string like “10,6,3,12”
The regex will match “,6,”
then it continuous at the very next sign from the rest of the string which is now “3,12”.As you see your search pattern will not match on “3,12” because there is no “,d,” anymore.
The trick is to not match the comas itself as you do but only take an look if they are present.
That can be fine done by using positive lookbehind and lookahead which EmEditor supports (thanks Yutaka).
For more info about that feature see e.g.: http://www.regular-expressions.info/lookaround.htmlExample:
search pattern: “oogl”
positive lookbehind if there is an “G” right before your search pattern: (?<=G)
positive lookahead if there is an “e” just after your search pattern: (?=e)So RegEx search for:
(?<=G)oogl(?=e)Will match:
Woogle
Google
Googlo
Google
FoogleExample for your issue with commas:
(?<=,)(d)(?=,)
01HTH? :lol:
.
October 15, 2011 at 12:03 am #9734DeipotentParticipantThanks for the detailed answer Stefan!
Didn’t know the characters were consumed by default, but lookbehind and lookahead does indeed solve the problem.
Thanks again! :-)
- AuthorPosts
- You must be logged in to reply to this topic.