Я хочу сопоставить ТОЛЬКО с <за исключением случаев, когда строка начинается с # </p>
пример
aaaaa < aaaa true #aaaa < aaaa false aaaa < aaa < true
Это должно быть 3 совпадений нет 2
Попробуйте Regex: ^[^#](?=.*<).*$
^[^#](?=.*<).*$
Демо
Это может быть сделано только с шаблоном отрицательного внешнего вида переменной ширины, который, к сожалению, поддерживается только несколькими движками регулярных выражений, не включая Java:
(?<!^#.*)<
Демонстрация: https://regex101.com/r/jcCGtZ/2