[K/N][stdlib] Fix cases with existing pattern before matched with dot quantifier interval in regular expressions implementation(^KT-49967 Fixed)

This commit is contained in:
Elena Lepilkina
2021-12-03 11:21:07 +03:00
committed by Space
parent 9c90d4e471
commit 219d9707ec
3 changed files with 10 additions and 3 deletions
@@ -1253,4 +1253,11 @@ class PatternTest {
regex = Regex(patString, RegexOption.DOT_MATCHES_ALL)
assertFalse(regex.containsMatchIn(testString))
}
@Test fun testFailedFindDotQuantifier() {
val regex = Regex("For.+ \\(1\\)")
val result = regex.find("This is good (1), For You")
assertNull(result)
}
}
@@ -97,8 +97,8 @@ internal abstract class AbstractSet(val type: Int = 0) {
?: -1
/**
* @param leftLimit - an index, to finish search back (left limit, inclusive).
* @param rightLimit - an index to start search from (right limit, exclusive).
* @param leftLimit - an index, to finish search back (left limit).
* @param rightLimit - an index to start search from (right limit).
* @param testString - test string.
* @param matchResult - match result.
* @return an index to start back search next time if this search fails(new left bound);
@@ -75,7 +75,7 @@ open internal class SequenceSet(substring: CharSequence, val ignoreCase: Boolean
var index = rightLimit
while (index >= leftLimit) {
index = testString.lastIndexOf(patternString, index, ignoreCase)
if (index < 0) {
if (index < 0 || index < leftLimit) {
return -1
}
// Check if we have a supplementary code point at the beginning or at the end of the string.