Я пытаюсь разбить строку на четыре части P, Q, R, S.
Строка начинается с P, как показано в следующем примере:
"P|VAL1|VAL2|VAL3|BLANK|Q|VAL4|BLANK|BLANK|R|VAL5|BLANK|VAL6|HELP|BLANK|VAL7|S|EDIT|BLANK|VAL8|(SDK 1.8)|BLANK".split("[(^?P\\|)][(Q?\\|)]?[(R?\\|)]?[(S?\\|)]")
"P |VAL1 | VAL2 | VAL3 | ПУСТОЙ | Q | VAL4 | ПУСТОЙ | ПУСТОЙ | R | VAL5 | ПУСТОЙ | VAL6 | ПОМОЩЬ | ПУСТОЙ | VAL7 | S | РЕДАКТИРОВАТЬ | ПУСТОЙ | VAL8 | (SDK 1.8) | ПУСТОЙ ».split (" [(^? P \ |)] [(Q? \ |)]? [(R? \ |)]? [(S? \ |)] ") Foreach println
дает
VAL1|VAL2|VAL3|BLANK
VAL4|BLANK|BLANK
VAL5|BLANK|VAL6|HEL
BLANK|VAL7
|EDIT|BLANK|VAL8
DK 1.8
BLANK
, где мои ожидания:
VAL1|VAL2|VAL3|BLANK
VAL4|BLANK|BLANK
VAL5|BLANK|VAL6|HELP|BLANK|VAL7
EDIT|BLANK|VAL8|(SDK 1.8)|BLANK
Однако
"P|VAL1|VAL2|VAL3|BLANK|Q|VAL4|BLANK|BLANK|R|VAL5|BLANK|VAL6|HELP|BLANK|VAL7|S|EDIT|BLANK|VAL8|(SDK 1.8)|BLANK".split("[(^P\\|)][(Q?\\|)]?[(R?\\|)]?[(S?\\|)]") (0)
Проверка первого элемента разделения с помощью выше дает
res9: String = ""
Кажется, что начало строки здесь не соблюдается.Я пробовал это на регулярное выражение 101 , а также он правильно соответствует P |в начале.Однако это также соответствует P|
в |HELP|
.Так что, похоже, мое регулярное выражение имеет недостатки.Однако мой вопрос: как пустая строка выше играет?