powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Регулярные выражения. Я сломал мозг.
14 сообщений из 14, страница 1 из 1
Регулярные выражения. Я сломал мозг.
    #33833508
punk-grunger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Честное слово, перерыл весь интернет... заморочил голову всему РусНету, Далнету, Улицам ВБ и вот пришел мучать вас :)
Итак... ASP.NET (VB)
 
Есть строка:
Dim str As String = "TEXT <p> OTHER [text]1<br>2dsd 3<head>[:text] opyat <a re>"
Мне нужно так применить регулярные выражения, чтобы получилась на выходе такая строка:
 
TEXT <p> OTHER <ZAMENA>12dsd 3</ZAMENA> opyat <a re>
 
Т.е., чтобы [text] и [:text] поменялись на <ZAMENA> и </ZAMENA>, соответственно. Но! Самое главное... чтобы внутри [text] и [:text] были убраны все теги.
 
Значит, что я сделал...
 Str = System.Text.RegularExpressions.Regex.Replace(Str, "\[text\](.*)\[:text\]", "<ZAMENA>$1</ZAMENA>")
 
Замена - заменяется... А вот как и что добавить в этот шаблон, чтобы убрать внутри теги... Уже думал рекурсию добавлять, циклы... ничего не получается. Уже голова не думает... Целый день убил на вот такую задачу...
Теги, это <(.*?)>... и как это "всунуть" в PATTERN?
 
Думаю алгоритм примерно такой:
While regexp.IsMatch(Str)
   Str = regexp.Replace(...)
End While
 
Опять же.. тыкал тыкал... максимум что получал - убирался <BR>.. причем последний..
 
Умоляю, помогите... Только на вас надежда. Горю!
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33833521
C...R...a...S...H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А выполнить несколько регулярных выражений?----------------------------------------
Knowledge is P...O...w...E...R!
My site
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33833537
Nisus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это делается так
Str = Regex.Replace(Str, "\[text\](.*)\[:text\]", new MatchEvaluator(RegexMatchEvaluator), RegexOptions.Singleline | RegexOptions.Compiled);   

public static string RegexMatchEvaluator(Match match)
  {
       return Regex.Replace(match.Groups[1].Value, "<[^>]+>", string.Empty);
   }
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33833551
vo1d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильно, выполни несколько (:
Сначала убери все тэги из строки, а потом замени что надо...
PS: Кстати, а зачем тебе убирать все тэги?vo1d
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33833561
punk-grunger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да вот именно.. мне нужны не все теги убирать, а только те, которые внутри [text][:text]
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33833582
punk-grunger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так.... теги оно убирает... но убирает вместе с [text][:text], т.е. была такая строка:
 
TEXT <p> OTHER [text]1<br>2dsd 3<head>[:text] opyat <a re>
 
Получилась такая:

TEXT <p> OTHER 12dsd 3 opyat <a re>
 
А мне нужна
 
TEXT <p> OTHER <ZAMENA>12dsd 3</ZAMENA> opyat <a re>
 
Плиз помогите.. мои условные рефлексы сейчас способны только на печать этого сообщения. Думать уже не получается...
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33833610
C...R...a...S...H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все работает!
string Str = "TEXT <p> OTHER [text]1<br>2dsd 3<head>[:text] opyat <a re>";
Str = Regex.Replace(Str, @"\[text\](.*)\[:text\]", new MatchEvaluator(RegexMatchEvaluator), RegexOptions.Singleline | RegexOptions.Compiled);

public static string RegexMatchEvaluator(Match match)
{
return "<ZAMENA>" + Regex.Replace(match.Groups[1].Value, "<[^>]+>", string.Empty) + "</ZAMENA>";
}----------------------------------------
Knowledge is P...O...w...E...R!
My site
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33833637
punk-grunger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Угу )) Всем спсб )) +1 каждому %)  www.codeholes.com
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33834472
C...R...a...S...H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это Nisus надо говорить спасибо!
----------------------------------------
Knowledge is P...O...w...E...R!
My site
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33871587
punk-grunger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опять трабла.. вроде уже думал разобрался с regex (года два летала вокруг меня мысль "а не разобраться ли мне с regex".. да руки только сейчас дошли и куча вопросов).
 
За прошлые ответы - всем спсб, многое сделал :) Показал бы, но боюсь зОбанют за рекламу и т.д., поэтому воздержусь ;)
 
... но когда подошел к "смайликам" наткнулся на одну проблему...
 
Как зареплейсить ВСЕ смайлики (не важно в принципе что..) везде КРОМЕ [code][:code]... т.е. есть строка:
Str="text :) text :) text [code]text :) text :) text :)[:code] text :)"
Нужно везде, кроме \[code\](.*?)\[:code\] поменять ":)" на "<img..>"...
Т.е. должно на выходе получится:
Str="text <img> text <img> text [code]text :) text :) text :)[:code] text <img> "
Как "рассказать" regex'у об этом самом КРОМЕ не помог ни гугль, ни MSDN... кавырял, кавырял... даже RegexBuddy скачал (не плохоая программа, помогает при составлении паттернов...) но и она оказалась бессильна. Помогите опять ;) www.codeholes.com
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33871890
punk-grunger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Форматирование "внутри форума", возможно слегка исказило мой вопрос, давайте чуть-чуть поменяем строки:
Вот, что имеем:
 
Str="text #SMILE# text #SMILE# text [code]text #SMILE# text #SMILE# text [:code] text #SMILE# text"

ЧТо нужно получить:
 
Str="text <ZAMENA> text <ZAMENA> text [code]text #SMILE# text #SMILE# text [:code] text <ZAMENA> text"
 
Т.е. внутри [code] и [:code] текст "#SMILE#" не должен быть заменен ничем.. А все снаружи - Да. Надеюсь, теперь я более верно и правильно сформулировал вопрос.
 
Пожалуйста, ответьте.
www.codeholes.com
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33872339
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТ.е. внутри
Код:
1.
2.
 и [:code] текст "#SMILE#" не должен быть заменен ничем.. 
Неправда ваша ! его надо заменять на код символов поищи в нете полно таблиц замены 
 [code=plaintext]ts = ts.Replace(")", "& # 41;")
примерно так только без пробелов здесь тоже это правило играет

а после этого заменяешь свои символы смайлов на пути к картинкам по всему сообщению
P.S. думаю идея понятна
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33872498
Smorn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>> Т.е. внутри [code] и [:code] текст "#SMILE#" не должен быть заменен ничем.. А все снаружи - Да.
string res = Regex.Replace(str, @"#SMILE#|(\[code\].*?\[:code\])", new MatchEvaluator(foo));
static string foo(Match m)
{
return (m.Groups[1].Success ? m.Value : "<IMG>");
}
...
Рейтинг: 0 / 0
Регулярные выражения. Я сломал мозг.
    #33873147
Nisus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
string text = @"text #SMILE# text #SMILE# text [code]text #SMILE# text #SMILE# text [:code] text #SMILE# text";
string replaced = new Regex(@"(\#SMILE\#)|(?:\[code\][\s\S]+?\[:code\])",
        RegexOptions.IgnoreCase|RegexOptions.Compiled)
    .Replace(text, new MatchEvaluator(RegexMatchEvaluator));

public static string RegexMatchEvaluator(Match match)
{
    return match.Groups[1].Value.Length > 0 ? ": - )" : match.Value;
}

примерно как-то так можно сделать, тут используется тот момент, что та часть, которую нужно проигнорировать выделена в non capture группу, то есть она выделается, но ее текст не будет доступен через группы, соответственно в первой группе для нее будет пустая строка, а нулевая группа всегда содержит полный текст найденного фрагмента, который мы и возвращаем (match.Value это синоним для match.Groups[0].Value).
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Регулярные выражения. Я сломал мозг.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]