Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Работа с регулярными выражениями для форума / 6 сообщений из 6, страница 1 из 1
08.09.2006, 20:57
    #33975407
ILB
ILB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с регулярными выражениями для форума
У меня есть вопрос, связанный с регулярными выражениями в ASP.NET. Дело в том, что у меня раньше форум одного из моих сайтов работал на собственном движке, PHP + MySQL. Но не так давно я решил перейти на ASP.NET. Должен отметить, очень нравится, всё намного более продуманнее, чем в PHP


Дело в том, что у меня перестали разбираться RegExp-ы, работающие на старом форуме.

У меня возникла проблема с 3-мя выражениями (остальные смогу решить сам, если разберусь с этими 3-мя):

http://ссылка - заменяется на <a href="http://ссылка">http://ссылка</a>
www.ссылка - заменяется на <a href="http://www.ссылка">www.ссылка</a>
[quote="Имя"]какой-то текст - заменяется на <div class="quote"><b>Имя</b><br>какой-то текст</div>

Надеюсь на помощь завсегдатаев форума
...
Рейтинг: 0 / 0
09.09.2006, 09:50
    #33975670
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с регулярными выражениями для форума
Честно сказать, лень писать за тебя... Покажи, что получилось, а я помогу подправить недочёты...
...
Рейтинг: 0 / 0
09.09.2006, 13:25
    #33975773
ILB
ILB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с регулярными выражениями для форума
Разобрался сам, вот код (на VB.NET), может быть, кому-то пригодится:

Stroka = Regex.Replace(Stroka, "(^|[\n ])((www|ftp)\.[^ \t\n\r<]*)", "$1<a href='$0'>$0</a>")
Stroka = Regex.Replace(Stroka, "(^|[\n ])([\w]+?://[^ \n\r\t<]*)", "$1<a href='$0'>$0</a>")
Stroka = Regex.Replace(Stroka, "\[quote=""(.*?)""\](.*?)\[/quote\]", "<div style='border: 1px solid #006699; background-color: whitesmoke; padding: 5px;'><b>$1</b> писал: <br /><br />$2</div></p>")

Stroka = Regex.Replace(Stroka, "\([\w]+?://[^ \""\n\r\t<]*?)\](.*?)\[/url\]", "<a href='$1'>$2</a>")
Stroka = Regex.Replace(Stroka, "\((www|ftp)\.[^ \""\n\r\t<]*?)\](.*?)\[/url\]", "<a href='http://$1'>$2</a>")
...
Рейтинг: 0 / 0
09.09.2006, 18:05
    #33975987
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с регулярными выражениями для форума
жаль что у ползователей форума небудет возможности делать вложенные квотки, например вот такие:
тестOops... авторOops...Oops...
...
Рейтинг: 0 / 0
09.09.2006, 20:48
    #33976066
ILB
ILB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с регулярными выражениями для форума
жаль что у ползователей форума небудет возможности делать вложенные квотки, например вот такие:
тестOops... авторOops...Oops...

Думаете? А если поменять (.*?) на (.*) - тогда простые квотинги будут слетать. Как же быть?
...
Рейтинг: 0 / 0
09.09.2006, 23:23
    #33976145
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с регулярными выражениями для форума
авторДумаете?
не думаю, а знаю ;) сам с этим парился - фишка в том, что простой заменой тут не обойтись - нужно проходить в цикле до тех пор пока не будут заменены все возможные варианты...
примерно вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Public Function StringReplaceForForum(ByVal s As String) As String

        s = HtmlEncode(s)

        s = quote(s, "(\[quote=.*)?(\[quote=([\w\s\:\;\)\(\?\&\#\@\.\']+?)\](.*?)\[/quote\])")

        Return s
End Function

Protected Function quote(ByVal str As String, ByVal pat As String) As String
        Dim r As Regex = New Regex(pat)
        Dim mm As Match = r.Match(str)
        While (mm.Success)
            Dim ts As String = mm.Groups( 4 ).Value
            ts = ts.Replace("[", "& # 91;")
            ts = ts.Replace("]", "& # 93;")

            str = str.Replace(mm.Groups( 2 ).Value, "<br /><table width=""90%"" cellpadding=""5"" cellspacing=""0"" class=""QUOTETable""><tr><td class=""QUOTECell"">" & mm.Groups( 3 ).Value & "</td></tr><tr><td>" & ts & "<br /></td></tr></table>")
            mm = r.Match(str)
        End While

        Return str
End Function
P.S. правда меня за такой подход критиковали, нужно мол использовать стрингбуилдер - и всё же как пример, я думаю подойдёт ;)
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Работа с регулярными выражениями для форума / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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