2011-02-09 3 views
0

У меня есть следующий RegexASP.NET регулярного выражения

(?<!<[title|h1|a][^>]*>[^<]*)(?<!<[meta|img][^>]*[^/>])(someword) 

я в основном с использованием выше, чтобы заменить некоторые слова с URL. т.е.

The all new product x 

станет

The all new <a href="/productx">product x</a> 

Сво все работает, как ожидалось. Я делаю отрицательный внешний вид, поэтому я не заменяю вещи, которые находятся в tilte, h1 и тегах привязки. Теперь мне нужно расширить это, чтобы, если в теге привязки есть жирный тег, он не соответствует.i.e.

<a href="/something">The all new <b>product x</b></a> 

не следует заменять. То, как у меня сейчас, отрицательный lookbehind находит жирный тег и совпадает. Я просто хочу, чтобы он пропускал, если он внутри. Для тех, кто заинтересован мне это нужно, как моего поиска страницы возвращает результаты, как

<a href="/something"><b>searchterm</b> some other text</a> 

Любой помощь ценится

ответ

0

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

(?<!<(?:title|h1|a)[^>]*>(?:[^<]|<[^/]|</(?!title|h1|a))*|<[meta|img][^>]*)(someword) 
+0

Это действительно работало, спасибо. Просто из интереса, какие другие способы вы предложите? Мне очень интересно узнать. Спасибо – Peuge

+0

Я не совсем знаком с тем, что доступно в ASP, но если html, который вы разобрали, является корректным XML, тогда вы сможете использовать 'XmlNode' для перемещения по дереву документов. Если узел является узлом элемента и не является тегом title/h1/a, посмотрите на его дочерние элементы. Если это текстовый узел, тогда найдите слова, которые вы хотите найти. Затем вы можете пропустить те элементы, которые вы не хотите касаться, вам не нужно беспокоиться о том, что нужно совместить внутри тега (например, теги img/meta), и легко добавить новые теги/условия для проверки , – jswolf19

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