Вот еще один вариант:
Pattern p = Pattern.compile("(?<![^|])BB(?![^|])");
String[] input = { "AABB", "BB", "AA|BB|CC", "BB|CC", "AA|BBB", "BBB|AA" };
for (String s : input)
{
Matcher m = p.matcher(s);
System.out.printf("%-10s : %b%n", s, m.find() );
}
output:
AABB : false
BB : true
AA|BB|CC : true
BB|CC : true
AA|BBB : false
BBB|AA : false
Это фактически то же самое, что и ответ @ Kobi, но там, где он говорит, BB
IS предшествует / сопровождаетсятруба или начало / конец строки, я делаю эквивалентное утверждение, что она НЕ предшествует / следует за символом, который НЕ является трубой.