Если я понимаю, что вы пытаетесь сделать, возможно, с помощью гигантского регулярное выражение не самый простой способ: Вы можете split
от |
и избавиться от нежелательных сепараторов ([
, ]
, "
) с помощью replaceAll
:
val str = """AuthLogout|vmlxapp21a|[13/Jan/2016:16:33:15 +0100]|"66.77.444.44 uid=XXXXX,ou=People,o=Bank,o=External,dc=xxxx,dc=com"|"abcd_123_portalweb_w "|[]|[41]||[]|[]"""
val withoutBoundaries = str.replaceAll("[\"\\]\\[]","")
val result = withoutBoundaries.split("\\|")
result.foreach(println)
который печатает:
AuthLogout
vmlxapp21a
13/Jan/2016:16:33:15 +0100
66.77.444.44 uid=XXXXX,ou=People,o=Bank,o=External,dc=xxxx,dc=com
abcd_123_portalweb_w
41
Если вы сделать хотите использовать регулярное выражение здесь, я бы создать суб-регулярное выражение VARS представляющих различные части текста, что вы после этого, чтобы сделать это несколько управляемо:
val plain = "(.*)" // no boundary characters
val boxed = s"\\[$plain\\]" // same, encapsulated by square brackets
val quoted = '"' + plain + '"' // same, encapsulated by double quotes
// the whole thing, separated by pipes:
val r = s"$plain\\|$plain\\|$boxed\\|$quoted\\|$quoted\\|$boxed\\|$boxed\\|$plain\\|$boxed\\|$boxed".r
val result = r.findAllIn(str).toList // this list has one item, as expected.
Теперь, если вы хотят, чтобы увидеть, как это регулярное выражение выглядит, вот она, - но я не рекомендую иметь это в вашем коде ...:
val r = """(.*)\|(.*)\|\[(.*)\]\|"(.*)"\|"(.*)"\|\[(.*)\]\|\[(.*)\]\|(.*)\|\[(.*)\]\|\[(.*)\]""".r
не избежать «\» скобки '[]' и 'ПРС | '. –