简体   繁体   中英

Regex for removing a specific BBCode from a string

I'm trying to write a simple method for removing specific BBCodes from an input string.

For example, where I have an input of:

string input = "[b]Hello World![/b]";

I would want to be able to do:

Remove(input, "b");

And get an output of:

"Hello World!"

Regex really isn't my strong suit. I've managed to piece together the following from google:

public static string Remove(string input, string code)
{
    string pattern = string.Format(@"\[{0}\].*?\[\/{1}\]", code, code);

    return Regex.Replace(input, pattern, string.Empty, RegexOptions.IgnoreCase);
}

Unfortunately this returns an empty string for my given example.

Can anyone advise me on how I can correct my regex to get the desired output?

Thanks

Use this simple regex: \\[/?{0}\\]

Your regex is removing the whole string

  • Your regex \\[{0}\\].*?\\[\\/{1}\\] is removing the entire [b]...[/b] string. That's why you are getting an empty string from the replacement.

  • What you need is to remove only the [b] and [b] . In normal regex, this is expressed quite simply with \\[/?b\\] , where the slash is made optional by the ?

  • In your parametrized regex, something like \\[/?{0}\\] will work.

The below regex would capture the string Hello World! inside the second group.

^(.*?)((?<=])[^[]*)(.*)$

DEMO

So replace all your input string with the second captured group.

If you sure that both starting and trailing special symbol must occur and you don't want them to be in a result, you can use positive look back ((?<=(your symbols here))) and positive look ahead ((?=(your symbols here))) for specified characters.

Complete answer will look like this:

(?<=(\[{0}\])).*(?=(\[\/{1}\]))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM