Regexp replace to to match a string, but not superstring












2















Let's say I want to replace the string "Vector" by "VectorBase", but there are existing instances of "VectorBase". So I would like to omit "VectorBase". What is an elegant way to achieve this?



An easy way is to do ignore the condition and do the replacement and at the end replace all instances of BaseBase by Base. I'm looking for a better way to achieve this.










share|improve this question





























    2















    Let's say I want to replace the string "Vector" by "VectorBase", but there are existing instances of "VectorBase". So I would like to omit "VectorBase". What is an elegant way to achieve this?



    An easy way is to do ignore the condition and do the replacement and at the end replace all instances of BaseBase by Base. I'm looking for a better way to achieve this.










    share|improve this question



























      2












      2








      2








      Let's say I want to replace the string "Vector" by "VectorBase", but there are existing instances of "VectorBase". So I would like to omit "VectorBase". What is an elegant way to achieve this?



      An easy way is to do ignore the condition and do the replacement and at the end replace all instances of BaseBase by Base. I'm looking for a better way to achieve this.










      share|improve this question
















      Let's say I want to replace the string "Vector" by "VectorBase", but there are existing instances of "VectorBase". So I would like to omit "VectorBase". What is an elegant way to achieve this?



      An easy way is to do ignore the condition and do the replacement and at the end replace all instances of BaseBase by Base. I'm looking for a better way to achieve this.







      regular-expressions replace query-replace






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 2 hours ago









      Drew

      47.4k462104




      47.4k462104










      asked 3 hours ago









      fermesommefermesomme

      195110




      195110






















          3 Answers
          3






          active

          oldest

          votes


















          3














          Try bVectorb. The b construct matches the empty string, but only at the beginning and end of a word (what is a "word" depends on the buffer's syntax table however: it should work in most cases, but there might be corner cases that are problematic.)



          See Backslash Constructs in Regular Expressions for more information.






          share|improve this answer

































            1














            One simple, very old-school way is to do multiple replacement passes:




            1. Replace VectorBase by, say AAAA (some string that you're sure doesn't already occur somewhere).


            2. Replace Vector by VectorBase.


            3. Replace AAAA by VectorBase.



            This works for replace-all and query-replace. It's pretty fail-safe and doesn't require any complex matching or fancy replacement regexp.



            However: It's important that you first look for any occurrences of the string you're thinking of using as the temporary replacement (e.g. AAAA). If there are already such occurrences then choose a different string. ;-)






            share|improve this answer































              0














              If you need to replace every instance except those specifically followed by some text, your regex engine MAY support "look around" functions. In that case, you could do this: replace Vector(?!Base) with VectorBase which would have the following result:



              Vector
              VectorFoo
              VectorBase


              would be converted to



              VectorBase
              VectorBaseFoo
              VectorBase




              share








              New contributor




              user3067860 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
              Check out our Code of Conduct.




















                Your Answer








                StackExchange.ready(function() {
                var channelOptions = {
                tags: "".split(" "),
                id: "583"
                };
                initTagRenderer("".split(" "), "".split(" "), channelOptions);

                StackExchange.using("externalEditor", function() {
                // Have to fire editor after snippets, if snippets enabled
                if (StackExchange.settings.snippets.snippetsEnabled) {
                StackExchange.using("snippets", function() {
                createEditor();
                });
                }
                else {
                createEditor();
                }
                });

                function createEditor() {
                StackExchange.prepareEditor({
                heartbeatType: 'answer',
                autoActivateHeartbeat: false,
                convertImagesToLinks: false,
                noModals: true,
                showLowRepImageUploadWarning: true,
                reputationToPostImages: null,
                bindNavPrevention: true,
                postfix: "",
                imageUploader: {
                brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                allowUrls: true
                },
                onDemand: true,
                discardSelector: ".discard-answer"
                ,immediatelyShowMarkdownHelp:true
                });


                }
                });














                draft saved

                draft discarded


















                StackExchange.ready(
                function () {
                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2femacs.stackexchange.com%2fquestions%2f47218%2fregexp-replace-to-to-match-a-string-but-not-superstring%23new-answer', 'question_page');
                }
                );

                Post as a guest















                Required, but never shown

























                3 Answers
                3






                active

                oldest

                votes








                3 Answers
                3






                active

                oldest

                votes









                active

                oldest

                votes






                active

                oldest

                votes









                3














                Try bVectorb. The b construct matches the empty string, but only at the beginning and end of a word (what is a "word" depends on the buffer's syntax table however: it should work in most cases, but there might be corner cases that are problematic.)



                See Backslash Constructs in Regular Expressions for more information.






                share|improve this answer






























                  3














                  Try bVectorb. The b construct matches the empty string, but only at the beginning and end of a word (what is a "word" depends on the buffer's syntax table however: it should work in most cases, but there might be corner cases that are problematic.)



                  See Backslash Constructs in Regular Expressions for more information.






                  share|improve this answer




























                    3












                    3








                    3







                    Try bVectorb. The b construct matches the empty string, but only at the beginning and end of a word (what is a "word" depends on the buffer's syntax table however: it should work in most cases, but there might be corner cases that are problematic.)



                    See Backslash Constructs in Regular Expressions for more information.






                    share|improve this answer















                    Try bVectorb. The b construct matches the empty string, but only at the beginning and end of a word (what is a "word" depends on the buffer's syntax table however: it should work in most cases, but there might be corner cases that are problematic.)



                    See Backslash Constructs in Regular Expressions for more information.







                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited 1 hour ago

























                    answered 3 hours ago









                    NickDNickD

                    2,4211312




                    2,4211312























                        1














                        One simple, very old-school way is to do multiple replacement passes:




                        1. Replace VectorBase by, say AAAA (some string that you're sure doesn't already occur somewhere).


                        2. Replace Vector by VectorBase.


                        3. Replace AAAA by VectorBase.



                        This works for replace-all and query-replace. It's pretty fail-safe and doesn't require any complex matching or fancy replacement regexp.



                        However: It's important that you first look for any occurrences of the string you're thinking of using as the temporary replacement (e.g. AAAA). If there are already such occurrences then choose a different string. ;-)






                        share|improve this answer




























                          1














                          One simple, very old-school way is to do multiple replacement passes:




                          1. Replace VectorBase by, say AAAA (some string that you're sure doesn't already occur somewhere).


                          2. Replace Vector by VectorBase.


                          3. Replace AAAA by VectorBase.



                          This works for replace-all and query-replace. It's pretty fail-safe and doesn't require any complex matching or fancy replacement regexp.



                          However: It's important that you first look for any occurrences of the string you're thinking of using as the temporary replacement (e.g. AAAA). If there are already such occurrences then choose a different string. ;-)






                          share|improve this answer


























                            1












                            1








                            1







                            One simple, very old-school way is to do multiple replacement passes:




                            1. Replace VectorBase by, say AAAA (some string that you're sure doesn't already occur somewhere).


                            2. Replace Vector by VectorBase.


                            3. Replace AAAA by VectorBase.



                            This works for replace-all and query-replace. It's pretty fail-safe and doesn't require any complex matching or fancy replacement regexp.



                            However: It's important that you first look for any occurrences of the string you're thinking of using as the temporary replacement (e.g. AAAA). If there are already such occurrences then choose a different string. ;-)






                            share|improve this answer













                            One simple, very old-school way is to do multiple replacement passes:




                            1. Replace VectorBase by, say AAAA (some string that you're sure doesn't already occur somewhere).


                            2. Replace Vector by VectorBase.


                            3. Replace AAAA by VectorBase.



                            This works for replace-all and query-replace. It's pretty fail-safe and doesn't require any complex matching or fancy replacement regexp.



                            However: It's important that you first look for any occurrences of the string you're thinking of using as the temporary replacement (e.g. AAAA). If there are already such occurrences then choose a different string. ;-)







                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered 2 hours ago









                            DrewDrew

                            47.4k462104




                            47.4k462104























                                0














                                If you need to replace every instance except those specifically followed by some text, your regex engine MAY support "look around" functions. In that case, you could do this: replace Vector(?!Base) with VectorBase which would have the following result:



                                Vector
                                VectorFoo
                                VectorBase


                                would be converted to



                                VectorBase
                                VectorBaseFoo
                                VectorBase




                                share








                                New contributor




                                user3067860 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.

























                                  0














                                  If you need to replace every instance except those specifically followed by some text, your regex engine MAY support "look around" functions. In that case, you could do this: replace Vector(?!Base) with VectorBase which would have the following result:



                                  Vector
                                  VectorFoo
                                  VectorBase


                                  would be converted to



                                  VectorBase
                                  VectorBaseFoo
                                  VectorBase




                                  share








                                  New contributor




                                  user3067860 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                  Check out our Code of Conduct.























                                    0












                                    0








                                    0







                                    If you need to replace every instance except those specifically followed by some text, your regex engine MAY support "look around" functions. In that case, you could do this: replace Vector(?!Base) with VectorBase which would have the following result:



                                    Vector
                                    VectorFoo
                                    VectorBase


                                    would be converted to



                                    VectorBase
                                    VectorBaseFoo
                                    VectorBase




                                    share








                                    New contributor




                                    user3067860 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                    Check out our Code of Conduct.










                                    If you need to replace every instance except those specifically followed by some text, your regex engine MAY support "look around" functions. In that case, you could do this: replace Vector(?!Base) with VectorBase which would have the following result:



                                    Vector
                                    VectorFoo
                                    VectorBase


                                    would be converted to



                                    VectorBase
                                    VectorBaseFoo
                                    VectorBase





                                    share








                                    New contributor




                                    user3067860 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                    Check out our Code of Conduct.








                                    share


                                    share






                                    New contributor




                                    user3067860 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                    Check out our Code of Conduct.









                                    answered 2 mins ago









                                    user3067860user3067860

                                    101




                                    101




                                    New contributor




                                    user3067860 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                    Check out our Code of Conduct.





                                    New contributor





                                    user3067860 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                    Check out our Code of Conduct.






                                    user3067860 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                    Check out our Code of Conduct.






























                                        draft saved

                                        draft discarded




















































                                        Thanks for contributing an answer to Emacs Stack Exchange!


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid



                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.


                                        To learn more, see our tips on writing great answers.




                                        draft saved


                                        draft discarded














                                        StackExchange.ready(
                                        function () {
                                        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2femacs.stackexchange.com%2fquestions%2f47218%2fregexp-replace-to-to-match-a-string-but-not-superstring%23new-answer', 'question_page');
                                        }
                                        );

                                        Post as a guest















                                        Required, but never shown





















































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown

































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown







                                        Popular posts from this blog

                                        Polycentropodidae

                                        Magento 2 Error message: Invalid state change requested

                                        Paulmy