powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / RegExp + Replace
12 сообщений из 12, страница 1 из 1
RegExp + Replace
    #34674052
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть текст который HTML (валидный или нет)
в нём нужно заменить значения атрибута для определённого тега

текст для примера
<html><body>
<a target="aaa.html" href="" >aaaa</a>
<h1>dsfds</h1>
<a href='bb.html' target="" >aaaa</a>
<h2>dsfds</h2>
<a href=cc.html >aaaa</a>



нужно получить для примера
<html><body>
<a target="http://aaa.html" href="" >aaaa</a>
<h1>dsfds</h1>
<a href='http://bb.html' target="" >aaaa</a>
<h2>dsfds</h2>
<a href=http://cc.html >aaaa</a>





у меня есть выражение которое вытаскивает значение href для тега A (с " ' или без)
это значения я получаю через коллекцию MatchCollectrion ( SubMatches(1) )


regExp1.Pattern = "<a(.*?)href=\" & Chr(34) & "?'?([^ \" & Chr(34) & "'>]+)\" & Chr(34) & "?'?.*?>"
regExp1.IgnoreCase = True
regExp1.Global = True

Вопрос как я могу заменить значения href(если оно есть) на своё в основном тексте
через регулярные выражения
причём только для одного выбранного элемента из коллекции

Надеюсь что вопрос понятен

Спасибо
...
Рейтинг: 0 / 0
RegExp + Replace
    #34674235
Фотография PA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежели правильно понял, то так можно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
strText = _
    "<html><body>" & vbCrLf & _
    "<a target=""aaa.html"" href="""" >aaaa</a>" & vbCrLf & _
    "<h1>dsfds</h1>" & vbCrLf & _
    "<a href='bb.html' target="""" >aaaa</a>" & vbCrLf & _
    "<h2>dsfds</h2>" & vbCrLf & _
    "<a href=cc.html >aaaa</a>"
    
    With New RegExp
        .Pattern = "(<a.*?href=(?:""|')?)([^ ""'>]+)((?:""|')?.*?>)"
        .IgnoreCase = True
        .Global = True
        strText = .Replace(strText, "$1http://$2$3")
    End With
...
Рейтинг: 0 / 0
RegExp + Replace
    #34674303
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PA

Класс
думаю то что нужно

так можно использовать для изменения атрибутов в любых тегах

а где можно найти хорошие примеры по регулярным выражениям (VBScript + JScript)
...
Рейтинг: 0 / 0
RegExp + Replace
    #34674321
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в продолжении
а как менять значения в цикле

допустим для разных тэгов <a> значения href должны быть разные
то есть если уже есть http:// в тексте то изменения нет (или другие варианты)
...
Рейтинг: 0 / 0
RegExp + Replace
    #34674390
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael Rа где можно найти хорошие примеры по регулярным выражениям (VBScript + JScript)Вот здесь в принципе можно найти кое-что полезное: http://www.regular-expressions.info/
Но обычно регулярные выражения очень уникальны для каждой задачи и их проще написать с нуля чем найти готовую и исправить для своих нужд. Слишком уж они сложно-читаемые...
...
Рейтинг: 0 / 0
RegExp + Replace
    #34674394
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael Rв продолжении
а как менять значения в циклеПараметр Global позволит изменить все вхождения встреченого выражения в строке или только первое. Оно?

michael Rдопустим для разных тэгов <a> значения href должны быть разные
то есть если уже есть http:// в тексте то изменения нет (или другие варианты)Показывай пример исходных строк и во что их надо превратить.
...
Рейтинг: 0 / 0
RegExp + Replace
    #34674434
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как часть примера

<a href="contact.asp">suggestions</a> page.
<a href="IP-commands.asp">IP Command Lines</a>
<a target="_top" href='http://www.gdfdf.com/click-2215688-4200925' >
<a href=IP-address.asp>IP Addresses Explained</a>


нужно как пример

<a href="../contact.asp">suggestions</a> page.
<a href="aa/IP-commands.asp">IP Command Lines</a>
<a target="_top" href='http://www.gdfdf.com/click-2215688-4200925' > не трогать
<a href=http://www.aaa/IP-address.asp>IP Addresses Explained</a>

то есть нужен цикл
и для каждого тега своё изменённое значение href (если нужно и если присутствует в тексте)
...
Рейтинг: 0 / 0
RegExp + Replace
    #34674477
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael Rто есть нужен циклДа, если нужна разная обработка для разных шаблонов, то действительно без цикла не обойтись.
Что-то в духе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
dim pattern_array( 4 ), replace_array( 4 )
pattern_array( 1 ) = "<a href=\"([a-z0- 9 .]+)\""
replace_array( 1 ) = "<a href=\"../$ 1 \""
... etc
re = new RegExp
re.global = true
for pattern_number =  1  to ubound(pattern_array)
    re.Pattern = pattern_array(pattern_number)
    strText = re.Replace(strText, replace_array(pattern_number))
next
...
Рейтинг: 0 / 0
RegExp + Replace
    #34674509
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мда

если немного по другому

если <a>

<a href="contact.asp?a=xxx&b=yyy">suggestions</a> page.
<a href="IP-commands.asp">IP Command Lines</a>
<a target="_top" href='http://www.gdfdf.com/click-2215688-4200925' >
<a href=IP-address.asp>IP Addresses Explained</a>


преобразовать

<a href="MyPage.asp?Site=http://www.site1/contact.asp;;a=xxx::b=yyy">suggestions</a> page.
<a href="MyPage.asp?Site=http://www.site1/IP-commands.asp">IP Command Lines</a>
<a target="_top" href='MyPage.asp?Site=http://www.gdfdf.com/click-2215688-4200925' > не трогать
<a href=MyPage.asp?Site=http://www.aaa/IP-address.asp>IP Addresses Explained</a>

поставить свою ссылку и если не было http:// добавить с www.... +
параметры от старой ссылки преобразовать как ;; :: для ? &



если <img>

<img src="1.gif">
<img src="http://www.site2/1.gif">


преобразовать
<img src="http://www.site1/3.gif">
<img src="http://www.site2/1.gif"> не менять

и по аналогии с другими тэгами


как такое сделать
...
Рейтинг: 0 / 0
RegExp + Replace
    #34674550
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
по циклу для разных шаблонов получается что замена
может менять один элемент несколько раз
а нужно чтобы определённый по одному разу
...
Рейтинг: 0 / 0
RegExp + Replace
    #34674651
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
michael RWhite Owl
по циклу для разных шаблонов получается что замена
может менять один элемент несколько раз
а нужно чтобы определённый по одному разуНу это ж элементарно! Вот сам, глазами посмотри на свой исходный текст и представь как бы ты действовал если бы делал все вручную?

Разбей большой текст на строки. Чтобы каждая строка начиналась с тэга. Положи все строки в массив или коллекцию потом сделай цикл по строкам, внутри цикл по шаблонам - найти первый шаблон который подойдет для этой строки, сделать замену, выйти из цикла по шаблонам, перейти на следующую строку. В конце склей все строки обратно в большой текст.
...
Рейтинг: 0 / 0
RegExp + Replace
    #34674745
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё сделал по другому

может кому пригодится
получаю коллекцию тегов через выражение и в цикле
в текст2 записываю до то находится До $1 & $1 & (исправленное $2) + $3
храню последнюю позицию (её использую при следующем цикле)
после цикла в текст=текст2
то есть склеиваю тексты по вырезанным позициям функциями для текста
вроде получается
только нужно будет для разных групп тэгов разные условия на редактирование
но это уже другая проблема



в любом случаи ребята спасибо
хранить результаты регулярных выражений в переменных - это класс
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / RegExp + Replace
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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