2014-09-11 3 views
0

У нас есть эти тексты на веб-страницахпоиска регулярных выражений и заменить ссылку

некоторые бла ## page1234.asp :: текст в ссылке ##, а затем некоторые более бла-бла

с синтаксисом является двойной хэш, то ссылка, то двойное двоеточие, то текст, который будет нажата, а затем положить конец связь с двойным хэша снова, как в:

##[url]::[visible text]## 

##[url]::[visible text]::[title]## 

Где [название] является текст мыши над для SEO оптимизация. Не самое причудливое решение, но оно проработало годами и не будет изменено на время.

Я бы хотел, чтобы ускорить функцию обнаружения/замены, чтобы использовать RegEx вместо «вручную», имеет vbscript/ASP, проходящий через все эти документы и выполняющий instr и замену.

Моя проблема заключается в создании модели с RegEx, которые будут либо заменить их с реальной HTML, включая

<a href="[url]" title="[title]">[visible text]</a> 

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

Так что мой первый приоритет, чтобы понять RegEx модели матча, так что будет искать

"##<text>::<text>##" or "##<text>::<text>::<text>##" 

, а затем возвращать либо всю строку, или, если это возможно сделать фактические вставки HTML тоже. Я думаю, что это две разные RegEx соответствует одна с 2-х переменных и один с 3 ..

ОБНОВЛЕНО с кодом на основе регулярных выражений Сэма:

dim oRegEx, sText 
Set oRegEx = New RegExp 
oRegEx.Pattern = "##(.*?)::(.*?)(?:::(.*?))?##" 
oRegEx.Global = true 

sText ="foo ##page1234.asp::visible text## bar ##page1234.xml::visible text::title## bar" 
sText = oRegEx.replace(sText, "<a href=""$1"" title=""$3"">$2</a>") 

response.Write(sText) 

Если бы изменить/1 к $ 1, чтобы он работал в среде vbscript. Но все остальное работало мгновенно.

Thanks community!

ответ

2

Поиск:

##(.*?)::(.*?)(?:::(.*?))?## 

Заменить:

<a href="$1" title="$3">$2<a> 

Demo


Прежде всего заметим, что я только что сделал это один expression..so если необязательный атрибут название (третий захват группа) отсутствует, у нас будет нулевой атрибут title (<a href="page.asp" title="">).

Теперь позволяет расширить выражение:

##  ?# literally match ## 
(.*?) ?# lazily capture 0+ characters 
::  ?# literally match :: 
(.*?) ?# lazily capture 0+ characters 
(?:  ?# begin optional non-capturing group 
    ::  ?# literally match :: 
    (.*?) ?# lazily capture 0+ characters 
)?  ?# end optional non-capturing group 
##  ?# literally match ## 
+0

Awesome! большое спасибо! – BerggreenDK

+0

И какой прекрасный сайт для демонстрации, думаю, я выиграю от этого в будущем. – BerggreenDK

+0

Рад, что я могу помочь, мне нравится Regex101 для написания/тестирования/обмена выражениями. – Sam

Смежные вопросы