Intellij использует регулярные выражения Java, не так ли? Попробуйте это:
(?m)(?<![\w.])Units(?![\w(.])(?=(?:[^\r\n"\\]++|\\.)*+[^\r\n"\\]*+$)
Первая часть - это ваше регулярное выражение после небольшой косметической операции:
(?<![\w.])Units(?![\w(.])
\b
в начале и в конце были фактически такими же, как отрицательный взгляд назад и отрицательный взгляд (соответственно) для \w
, поэтому я сложил их в ваши существующие обходные пути. Новый заголовок соответствует остальной части строки, если он содержит четное число (включая ноль) неэкранированных кавычек:
(?=(?:[^\r\n"\\]++|\\.)*+[^\r\n"\\]*+$)
Это относится к патологическим случаям, подобным тому, на который указал Уэлбог, и в отличие от регулярного выражения Майкла, он найдет несколько вхождений текста в одной строке. Но это не учитывает комментарии. Является ли функция поиска / замены Intellij достаточно умной, чтобы игнорировать текст в комментариях? Если подумать, разве не встроена поддержка рефакторинга?