(?! )
- негативный прогноз. Он соответствует нулевым символам, если содержащийся в нем шаблон не соответствует текущей позиции.
(?!p|a|b|i)\\b
будет смотреть на следующий символ, чтобы увидеть, соответствует ли он p|a|b|i
. Если это произойдет, прогноз не сможет ничего соответствовать. Если содержащийся шаблон не соответствует, упреждающий просмотр выполняется успешно, и он пытается найти следующий токен в шаблоне из той же позиции. В этом случае слово границы.
То, что вы хотите, вероятно, примерно так:
@"</?(?!(?:p|a|b|i)\b)\w+[^>]*>"
Он ожидает что-то, что соответствует (?:p|a|b|i)\b
. Если этот шаблон не соответствует, упреждающий просмотр завершается успешно, и он будет соответствовать по крайней мере одному слову-символу, за которым следует любое количество символов до закрытия ">"
.