поиск совпадений внутри каналов с использованием регулярных выражений Java - PullRequest
1 голос
/ 18 ноября 2011

как вы получаете содержимое строки внутри трубы?

|qwe|asd|zxc|

как я могу получить

qwe asd zxc

я пробовал это

"\\|{1,}(\\w*)\\|{1,}"

и это, кажется, не работает

я тоже пробовал это

"\\|{1,}[\\w*]\\|{1,}"

он возвращает только qwe хотя

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Регулярное выражение для этого не нужно, но если вы настаиваете на использовании регулярных выражений:

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|.

Вы можете исправить это, сделав предыдущую трубу необязательной.

1 голос
/ 18 ноября 2011

если String line="|qwe|asd|zxc|";, то
используйте string[] fields = line.split("\\|");
чтобы получить массив всех ваших результатов ..

...