Christian de Bellefeuille
asked on
Stripping piece of text with RegEx
I would like to be able to remove a part of text using RegEx
Example:
"[BONJOUR]Everything here should be removed as well[/BONJOUR]This part should remain"
Woud become "This part should remain".
I've tried many things, but none work:
Thanks for your help.
Example:
"[BONJOUR]Everything here should be removed as well[/BONJOUR]This part should remain"
Woud become "This part should remain".
I've tried many things, but none work:
[BONJOUR].+[/BONJOUR]
\x5bBONJOUR\x5d.+\x5b/BONJ OUR\x5d
Thanks for your help.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
As kaufmed said. Anyway, regular expressions are not powerful enough for more general cases like this because there is no way to describe nested pair structures.
@pepr
Actually, some regex libraries support balancing groups, which can be used to match nested structures--albeit in a more complicated fashion. I think the Boost regex engine does, but I'm not 100% on that.
Actually, some regex libraries support balancing groups, which can be used to match nested structures--albeit in a more complicated fashion. I think the Boost regex engine does, but I'm not 100% on that.
ASKER
@kaufmed: It's close, but it still not it. The result i get with your expression is:
[R]This part should remain
[R]This part should remain
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
@bigdogdman: Yes i've tried. The only difference between your version and Kaufmed version is the \ right before the /BONJOUR. But i get the same result.
But there is something different if i test your expression with this website. It seems to work there.
But does it have anything to do with boost? I'm using this library for RegEx. I thought RegEx was a standard... no mather which language or library i use, i was expecting the same results.
Here's my test code:
But there is something different if i test your expression with this website. It seems to work there.
But does it have anything to do with boost? I'm using this library for RegEx. I thought RegEx was a standard... no mather which language or library i use, i was expecting the same results.
Here's my test code:
void testBoostRegex()
{
std::string wStr = "[BONJOUR]Everything here should be removed as well[/BONJOUR]This part should remain";
boost::regex wExp("\[BONJOUR\].+?\[\/BONJOUR\]");
cout << boost::regex_replace(wStr, wExp, "") << endl;
return;
}
ASKER
@bigdogdman: My bad. I've forgot to double the \. With the following expression, it work:
boost::regex wExp("\\[BONJOUR\\].+?\\[\ \/BONJOUR\ \]");
Thanks a lot!
boost::regex wExp("\\[BONJOUR\\].+?\\[\
Thanks a lot!
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
I'm not sure that bigdogdman's post should be the accepted answer here, since it's really just a copy of what I posted. If anything, pepr's last comment should be the answer since it goes into detail about the need for double-escaping of the backslash--something I mistakenly assumed would be understood given the target language of C++.
@kaufmed: I was late :) Anyway, things are as they are, and it is OK.
Sorry kaufmed, I didn't mean to steal any poins from you; my bad. :">
I'll try to remember to credit you (or anyone) from now on when I'm merely offering an adjustment to their suggestion.
I'll try to remember to credit you (or anyone) from now on when I'm merely offering an adjustment to their suggestion.
It's not so much the points as the correctness. The OP stated that my suggestion didn't work (which we now know was due to lack of escaping). You're suggestion assumes that the issue is with the forward slash, which it is not. The only languages that require a forward slash to be escaped are those which use pattern delimiters (e.g. PHP, Perl, Javascipt, etc.). So in a technical sense, your answer is a repeat of my answer.
I see now that the OP posted info regarding the double-backslash as well.
I see now that the OP posted info regarding the double-backslash as well.
ASKER
I just want to point out that:
I'll ask the moderator to split the point equally between the 3 of you, or reopen the question so i can accept the answer properly.
By the way, there will be a similar question in the next hour. This question was "over simplified". If i try to adapt to the real situation i'm facing, it still doesn't work
pepr reply happend after i've accepted the answer. I would have gave him some points for the additionnal information that he have provided
bigdogdman didn't just "copy&paste" your version, but he have shown the exact version that work. In kaufmed version, a \ was missing before the [\/BONJOUR]. I wouldn't feel correct for E-E readers if i accepted a "partially working" version just based on the fact that you answered first.
I've found the double backslash myself, you can see it with the timestamps.
I'll ask the moderator to split the point equally between the 3 of you, or reopen the question so i can accept the answer properly.
By the way, there will be a similar question in the next hour. This question was "over simplified". If i try to adapt to the real situation i'm facing, it still doesn't work
Don't sweat it. I've said my peace, and you have your answer. Nobody lost a limb. It's a good day for everyone ; )
ASKER
I just want that everyone feel ok with the answer. I didn't know that it was different for PHP/Perl/Javascript. When i've posted this question, i've written in the tags "boost" because this is the library that i use (boost::regex_replace to be precise). And i've posted this in regular expression, and "C++ Languages".
But ... i was testing it in myregextester web site, because i thought i've made a mistake with my usage of boost library.
I know how it feel when someone accept the wrong answer or when the OP didn't specified things.
But ... i was testing it in myregextester web site, because i thought i've made a mistake with my usage of boost library.
I know how it feel when someone accept the wrong answer or when the OP didn't specified things.
ASKER
There's no way to ask a related question anymore, so here's the link for those who are interrested to give precisions:
https://www.experts-exchange.com/questions/28301459/Stripping-piece-of-text-with-RegEx-Part-2.html
https://www.experts-exchange.com/questions/28301459/Stripping-piece-of-text-with-RegEx-Part-2.html
Well, thanks for the points. Anyway, you should know I am not doing it for the points. (It is a game.) I am learning and repeating via searching for the answer. That's it. :)
Have a nice time (all of you).
Have a nice time (all of you).