Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #9730
    Deipotent
    Participant

    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 ?

    #9733
    Stefan
    Participant

    .

    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.html

    Example:
    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
    Foogle

    Example for your issue with commas:
    (?<=,)(d)(?=,)
    01

    HTH? :lol:

    .

    #9734
    Deipotent
    Participant

    Thanks 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! :-)

Viewing 3 posts - 1 through 3 (of 3 total)
  • You must be logged in to reply to this topic.