diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2015-06-19 01:28:18 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2015-06-19 01:28:18 +0200 |
commit | 37ff086c86129602c34f660cd4193c9a02273f81 (patch) | |
tree | 727e31dcc47d5479817d3988a628efedb03d8067 | |
parent | d7e680331c08a5bcd178f0f2184377cfa940e4a6 (diff) | |
parent | 90292754f579efca3672970a2f5d40630936d013 (diff) | |
download | Nim-37ff086c86129602c34f660cd4193c9a02273f81.tar.gz |
Merge pull request #2940 from flaviut/fix-nre-20
Fix nre issue #20
-rw-r--r-- | lib/impure/nre.nim | 8 | ||||
-rw-r--r-- | tests/stdlib/nre/split.nim | 1 |
2 files changed, 7 insertions, 2 deletions
diff --git a/lib/impure/nre.nim b/lib/impure/nre.nim index 6f92b0d71..973f1f2ee 100644 --- a/lib/impure/nre.nim +++ b/lib/impure/nre.nim @@ -586,9 +586,12 @@ proc split*(str: string, pattern: Regex, maxSplit = -1, start = 0): seq[string] result = @[] var lastIdx = start var splits = 0 - var bounds = 0 .. 0 + var bounds = 0 .. -1 + var never_ran = true for match in str.findIter(pattern, start = start): + never_ran = false + # bounds are inclusive: # # 0123456 @@ -615,7 +618,8 @@ proc split*(str: string, pattern: Regex, maxSplit = -1, start = 0): seq[string] # "12".split("\b") would be @["1", "2", ""], but # if we skip an empty last match, it's the correct # @["1", "2"] - if bounds.a <= bounds.b or bounds.b < str.high: + # If matches were never found, then the input string is the result + if bounds.a <= bounds.b or bounds.b < str.high or never_ran: # last match: Each match takes the previous substring, # but "1 2".split(/ /) needs to return @["1", "2"]. # This handles "2" diff --git a/tests/stdlib/nre/split.nim b/tests/stdlib/nre/split.nim index 8064e40b7..9d57ea7d8 100644 --- a/tests/stdlib/nre/split.nim +++ b/tests/stdlib/nre/split.nim @@ -8,6 +8,7 @@ suite "string splitting": check("1 2".split(re(" ")) == @["1", "2"]) check("foo".split(re("foo")) == @["", ""]) check("".split(re"foo") == @[""]) + check("9".split(re"\son\s") == @["9"]) test "captured patterns": check("12".split(re"(\d)") == @["", "1", "", "2", ""]) |