В .NET вы можете использовать бесконечную ширину вида:
\b(?<!-)test\b(?<!<[^<>]*)(?!-|[^<>]*>)
См. Демонстрационный пример .NET
В коде:
var pattern = @"\b(?<!-)test\b(?<!<[^<>]*)(?!-|[^<>]*>)";
информация
\b
- граница слова
(?<!-)
- отрицательный взгляд сзади, который не соответствует совпадению, если слева от текущего местоположения есть -
test
- слово test
\b
- граница слова
(?<!<[^<>]*)
- отрицательный вид сзади, который не соответствует совпадению, если есть <
и любые 0 или более символов, отличных от <
и >
, непосредственно слева от текущего местоположения
(?!-|[^<>]*>)
- отрицательный прогноз, который не дает совпадения, если есть -
или любые 0+ символов, отличные от <
и >
, сопровождаемые >
непосредственно справа от текущего местоположения.