Регулярное выражение для этого не нужно, но если вы настаиваете на использовании регулярных выражений:
Pattern p = Pattern.compile("\\|?(\\w+)\\|");
Matcher m = p.matcher("|qwe|asd|zxc|");
while (m.find()) {
System.out.println(m.group(1));
}
/* outputs:
qwe
asd
zxc
*/
Почему ваше регулярное выражение не работает:
/\|{1,}(\w*)\|{1,}/
аналогично /\|(\w*)\|/
и соответствует словам между трубами.
Теперь в вашем примере строки первое совпадение будет |qwe|
.
Затем он продолжает поиск совпадений в asd|zxc|
; в соответствии с шаблоном он пропускает asd
и соответствует только |zxc|
.
Вы можете исправить это, сделав предыдущую трубу необязательной.