Regexp replace to to match a string, but not superstring
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
add a comment |
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
add a comment |
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
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
regular-expressions replace query-replace
edited 2 hours ago
Drew
47.4k462104
47.4k462104
asked 3 hours ago
fermesommefermesomme
195110
195110
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
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.
add a comment |
One simple, very old-school way is to do multiple replacement passes:
Replace
VectorBase
by, sayAAAA
(some string that you're sure doesn't already occur somewhere).Replace
Vector
byVectorBase
.Replace
AAAA
byVectorBase
.
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. ;-)
add a comment |
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
New contributor
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
add a comment |
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.
add a comment |
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.
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.
edited 1 hour ago
answered 3 hours ago
NickDNickD
2,4211312
2,4211312
add a comment |
add a comment |
One simple, very old-school way is to do multiple replacement passes:
Replace
VectorBase
by, sayAAAA
(some string that you're sure doesn't already occur somewhere).Replace
Vector
byVectorBase
.Replace
AAAA
byVectorBase
.
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. ;-)
add a comment |
One simple, very old-school way is to do multiple replacement passes:
Replace
VectorBase
by, sayAAAA
(some string that you're sure doesn't already occur somewhere).Replace
Vector
byVectorBase
.Replace
AAAA
byVectorBase
.
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. ;-)
add a comment |
One simple, very old-school way is to do multiple replacement passes:
Replace
VectorBase
by, sayAAAA
(some string that you're sure doesn't already occur somewhere).Replace
Vector
byVectorBase
.Replace
AAAA
byVectorBase
.
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. ;-)
One simple, very old-school way is to do multiple replacement passes:
Replace
VectorBase
by, sayAAAA
(some string that you're sure doesn't already occur somewhere).Replace
Vector
byVectorBase
.Replace
AAAA
byVectorBase
.
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. ;-)
answered 2 hours ago
DrewDrew
47.4k462104
47.4k462104
add a comment |
add a comment |
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
New contributor
add a comment |
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
New contributor
add a comment |
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
New contributor
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
New contributor
New contributor
answered 2 mins ago
user3067860user3067860
101
101
New contributor
New contributor
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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