Ответ 1
Это должно сделать это:
(?<!<[^>]*)_mystring_
Он использует отрицательный внешний вид, чтобы проверить, что согласованная строка не имеет < перед ним без соответствующего >
У меня возникают трудности с конкретным Regex, который я пытаюсь использовать. Я ищу каждое вхождение строки (для моих целей, я скажу, что это "mystring" ) в документе, ИСКЛЮЧЕНИЕ, где это в теге, например.
<a href="_mystring_">
не должно совпадать, но
<a href="someotherstring">_mystring_</a>
Должно совпадать, так как оно не находится внутри тега (внутри значения "внутри" и "маркеры" ). Я также использую функции регулярного выражения .NET для этого.
Это должно сделать это:
(?<!<[^>]*)_mystring_
Он использует отрицательный внешний вид, чтобы проверить, что согласованная строка не имеет < перед ним без соответствующего >
Когда ваш процессор регулярных выражений не поддерживает переменную длину, загляните сзади, попробуйте следующее:
(<.+?>[^<>]*?)(_mystring_)([^<>]*?<.+?>)
Сохраните группы захвата 1 и 3 и замените группу захвата 2:
Например, в Eclipse найдите:
(<.+?>[^<>]*?)(_mystring_)([^<>]*?<.+?>)
и замените на:
$1_newString_$3
(Другие процессоры regex могут использовать другой синтаксис группы захвата, такой как\1)
Еще одно регулярное выражение для поиска, которое сработало для меня
(?![^<]*>)_mystring_
Источник: fooobar.com/questions/316033/...
Быстрая и грязная альтернатива заключается в использовании функции замены регулярного выражения с обратным вызовом для кодирования содержимого тегов (все между < и > ), например, с использованием base64, затем запуска вашего поиска, а затем запуска другого обратного вызова для декодирования вашего тега содержание.
Это также может сэкономить много царапин на голове, когда вам нужно исключить определенные теги из поиска регулярных выражений - сначала обфускайте их и оберните их маркером, который не будет соответствовать вашему поиску, а затем запустите ваш поиск, а затем деобфискируйте все, что есть в маркерах.
Зачем использовать регулярное выражение?
Для xhtml загрузите его в XDocument/XmlDocument; для (non-x) html Html Agility Pack выглядел бы более разумным выбором...
В любом случае, это приведет к анализу html в DOM, чтобы вы могли перебирать узлы и проверять их.
Обычные выражения обычно не являются хорошей идеей в XML. Это слишком просто, чтобы столкнуться с проблемами с поисковыми выражениями, соответствующими многим или слишком маленьким. Также почти невозможно сформулировать регулярное выражение, которое может правильно идентифицировать и обрабатывать разделы CDATA, инструкции обработки (PI) и escape-последовательности, которые позволяет XML.
Если у вас нет полного контроля над содержимым XML, которое вы получаете, и он может гарантировать, что он не включит такие конструкторы (и не изменится), я бы посоветовал использовать какой-либо XML-парсер (XDocument или XmlDocument in. net, например).
Сказав это, если вы все еще намерены использовать регулярное выражение в качестве своего механизма поиска, что-то вроде следующего должно работать с использованием класса RegEx в .NET. Вы можете захотеть проверить его с некоторыми вашими собственными тестовыми примерами на сайте, например Regexlib. Вы также можете искать в своем каталоге регулярных выражений, чтобы найти то, что может соответствовать вашим потребностям.
[ > ] (_ _ MyString) [<]..
Игнорируя, что есть другие способы, и что я не настоящий эксперт по регулярному выражению, но одна вещь, которая появилась у меня в голове, была:
Итак, используя <[^>]*?(mystring)[^>]*>
, вы можете найти теги. Замените их на другую строку. Нормально ли вы замените оставшиеся мистификации. Замените otherstring на mystring
Сырой, но эффективный.... может быть.