return res
end
+ # Is `self` in `s`?
protected fun is_in(s: Text): Bool do return search_index_in(s, 0) != -1
end
private fun compute_gs
do
- var x = _motif
var m = _length
var suff = suffixes
var i = 0
# assert "I say hello to the world!".search_from("hello",7) == null
fun search_from(p: Pattern, from: Int): nullable Match do return p.search_in(self, from)
+ # Search the last occurence of the text `t`.
+ #
+ # assert "bob".search_last("b").from == 2
+ # assert "bob".search_last("bo").from == 0
+ # assert "bob".search_last("ob").from == 1
+ # assert "bobob".search_last("ob").from == 3
+ # assert "bobbob".search_last("bb").from == 2
+ # assert "bobbob".search_last("bob").from == 3
+ # assert "bob".search_last("z") == null
+ # assert "".search_last("b") == null
+ fun search_last(t: Text): nullable Match do
+ return search_last_up_to(t, length)
+ end
+
+ # Search the last occurence of the text `t` before `up_to`.
+ #
+ # assert "bobbob".search_last_up_to("b", 3).from == 2
+ # assert "bobbob".search_last_up_to("b", 6).from == 5
+ # assert "bobbob".search_last_up_to("b", 0) == null
+ fun search_last_up_to(t: Text, up_to: Int): nullable Match do
+ var i = up_to - t.length
+
+ while i >= 0 do
+ if substring(i, t.length) == t then
+ return new Match(self.to_s, i, t.length)
+ end
+ i -= 1
+ end
+ return null
+ end
+
# Search all occurrences of p into self.
#
# var a = new Array[Int]
# Split `self` using `p` as separator.
#
# assert "hello world".split('o') == ["hell", " w", "rld"]
- fun split(p: Pattern): Array[SELFTYPE]
+ fun split(p: Pattern): Array[String]
do
var matches = p.split_in(self)
- var res = new Array[SELFTYPE].with_capacity(matches.length)
+ var res = new Array[String].with_capacity(matches.length)
for m in matches do res.add(m.to_s)
return res
end
# @deprecated alias for `split`
- fun split_with(p: Pattern): Array[SELFTYPE] do return self.split(p)
+ fun split_with(p: Pattern): Array[String] do return self.split(p)
# Split `self` on the first `=`
#
#
# assert "hlelo".replace("le", "el") == "hello"
# assert "hello".replace('l', "") == "heo"
- fun replace(p: Pattern, string: SELFTYPE): SELFTYPE
+ fun replace(p: Pattern, string: SELFTYPE): String
do
return self.split_with(p).join(string)
end