summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library/scala/util/matching/Regex.scala22
-rw-r--r--test/files/run/ReplacementMatching.scala11
2 files changed, 14 insertions, 19 deletions
diff --git a/src/library/scala/util/matching/Regex.scala b/src/library/scala/util/matching/Regex.scala
index 6f0e4d2a16..9e101eb0b8 100644
--- a/src/library/scala/util/matching/Regex.scala
+++ b/src/library/scala/util/matching/Regex.scala
@@ -111,30 +111,24 @@ class Regex(regex: String, groupNames: String*) {
* Replaces all matches using a replacer function.
*
* @param target The string to match.
- * @param replacer The function which maps a matched string to another string.
+ * @param replacer The function which maps a match to another string.
* @return The target string after replacements.
*/
- def replaceAllIn(target: java.lang.CharSequence, replacer: String => String): String = {
- val it = new Regex.MatchIterator(target, this, groupNames) with Replacement
+ def replaceAllIn(target: java.lang.CharSequence, replacer: Match => String): String = {
+ val it = new Regex.MatchIterator(target, this, groupNames).replacementData
while (it.hasNext) {
- val matchedString = it.next
- it.replace(replacer(matchedString))
+ val matchdata = it.next
+ it.replace(replacer(matchdata))
}
it.replaced
}
- /**
- * Replaces all matches using a replacer function.
- *
- * @param target The string to match.
- * @param replacer The function which maps a match to another string.
- * @return The target string after replacements.
- */
- def replaceAllMatchesIn(target: java.lang.CharSequence, replacer: Match => String): String = {
+ def replaceSomeIn(target: java.lang.CharSequence, replacer: Match => Option[String]): String = {
val it = new Regex.MatchIterator(target, this, groupNames).replacementData
while (it.hasNext) {
val matchdata = it.next
- it.replace(replacer(matchdata))
+ val replaceopt = replacer(matchdata)
+ if (replaceopt != None) it.replace(replaceopt.get)
}
it.replaced
}
diff --git a/test/files/run/ReplacementMatching.scala b/test/files/run/ReplacementMatching.scala
index 30c525b63c..05040d98a3 100644
--- a/test/files/run/ReplacementMatching.scala
+++ b/test/files/run/ReplacementMatching.scala
@@ -15,18 +15,19 @@ object Test {
def replacementMatching {
val regex = """\$\{(.+?)\}""".r
- val replaced = regex.replaceAllMatchesIn("Replacing: ${main}. And another method: ${foo}.",
+ val replaced = regex.replaceAllIn("Replacing: ${main}. And another method: ${foo}.",
(m: util.matching.Regex.Match) => {
val identifier = m.group(1)
identifier
})
assert(replaced == "Replacing: main. And another method: foo.")
- val regex2 = """\$\{(.+?)\}""".r
- val replaced2 = regex2.replaceAllIn("Replacing: ${main}. And then one more: ${bar}.", (s: String) => {
- "$1"
+ val regex3 = """\$\{(.+?)\}""".r
+ val replaced3 = regex3.replaceSomeIn("Replacing: ${main}. And another: ${foo}.", (m: util.matching.Regex.Match) => {
+ val id = m.group(1)
+ if (id.startsWith("m")) Some(id) else None
})
- assert(replaced2 == "Replacing: main. And then one more: bar.")
+ assert(replaced3 == "Replacing: main. And another: ${foo}.")
}
def groupsMatching {