Regex для прокладки бирки BBCode из строки
Вопрос
Я работаю над функцией, которая использует Markitup jQuery! Редактор в качестве редактора BBCode. Я только разрешаю небольшое подмножество BBCodes, включая следующее:
[b]
[i]
[quote]
[quote=Mr Incredible]
[img]
[url]
[youtube]
У меня есть 1500 символов «Описание», которое использует редактор, но я также планирую хранить 150 символов переварить описания со всеми BBCode убрали.
В настоящее время я использую простое регельс, чтобы сделать это в C #. Он в основном NUKES встроенными BBCodes в строке, но она оставляет за собой много «шумного контента», как URL [IMG] или видео ID [YouTube], который я также хотел бы удалить из дайджеста.
Вот мое текущее регулярное выражение:
public static String StripBBCode(string bbCode)
{
string r = Regex.Replace(bbCode,
@"\[(.*?)\]",
String.Empty, RegexOptions.IgnoreCase);
// Finally, replace all newlines with a space
r = Regex.Replace(r,
@"(\r\n|\n\r|\r|\n)+",
@" ", RegexOptions.IgnoreCase);
return r;
}
Если я запускаю следующую строку через эту функцию, я получаю результат, показанный ниже:
источник
This is [b]bold[/b]. This is [i]italic[/i].
Here is an image:
[img]http://www.phatmac.com/Pics/Movies/Incredibles.jpg[/img]
Here is a link to [url=http://espn.go.com]ESPN[/url].
Here is a YouTube video:
[youtube]WJ0UkZ3W4FA[/youtube]
результат
Это смелый. Это курсирует. Вот изображение: http://www.phatmac.com/pics/movies/incredibles.jpg. Вот ссылка на ESPN. Вот видео Youtube: wj0ukz3w4fa
Вот что я хочу вернуться
Это смелый. Это курсирует. Вот изображение: вот ссылка на ESPN. Вот видео Youtube:
Как я могу изменить функцию My PlassBCode () для этого?
Отредактировано
Предложение из Дэвида ниже в первом ответе было правильным.
Вот что я использую сейчас:
string r = Regex.Replace(s,
@"\[youtube\].*\[\/youtube\]",
String.Empty, RegexOptions.IgnoreCase);
r = Regex.Replace(r,
@"\[img\].*\[\/img\]",
String.Empty, RegexOptions.IgnoreCase);
Решение
У вас есть несколько тегов, которые вы хотите, чтобы содержимое удалено, а остальное, где вы хотите, только теги удалены.
Заменить [img].*[/img]
со строкой. Пусты и [youtube].*[/youtube]
, и все, что вам нужно, чтобы содержимое удалено, то сделайте ваше удаление [.*]
.
Редактировать:
Я тоже не эксперт Regex, но я думаю, @"\[img\].*?\[/img\]"
это то, что вы хотите. Я не думаю, что вам нужны скобки в @"\[(.*?)\]"
, Я думаю, что в этом контексте скобки означает сохранить соответствующий текст, чтобы вы могли сопоставить его снова с \1
.