Skip to content

Instantly share code, notes, and snippets.

@fcannizzaro
Created August 12, 2017 11:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fcannizzaro/885dd2d8986fd78a4db271dd22fccf7b to your computer and use it in GitHub Desktop.
Save fcannizzaro/885dd2d8986fd78a4db271dd22fccf7b to your computer and use it in GitHub Desktop.
Kotlin Regex Extensions
/**
*
* Copyright 2017 FRANCESCO SAVERIO CANNIZZARO
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
* of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
* THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
fun main(args: Array<String>) {
val regex = "[a-z]*\\[([0-9]+)\\]@(.*)"
val value = "id[850]@text"
value.groups(regex) {
println("id=${it[0]}")
println("content=${it[1]}")
}
value.matches(regex) {
println("regex matches")
}
value.notMatches(regex) {
println("regex not matches")
}
}
/**
*
* Copyright 2017 FRANCESCO SAVERIO CANNIZZARO
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
* of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
* THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
fun String.matches(regex: Regex, runner: String.() -> Unit) {
if (matches(regex)) {
runner.invoke(this)
}
}
fun String.notMatches(regex: Regex, runner: String.() -> Unit) {
if (!matches(regex)) {
runner.invoke(this)
}
}
fun String.groups(regex: String, runner: (groups: Array<String>) -> Unit) {
val matcher = regex.toPattern().matcher(this)
if (matcher.matches()) {
val size = matcher.groupCount()
var array = emptyArray<String>()
for (i in 1..size) array += matcher.group(i)
runner.invoke(array)
}
}
fun String.matches(regex: String, runner: String.() -> Unit) = matches(regex.toRegex(), runner)
fun String.notMatches(regex: String, runner: String.() -> Unit) = notMatches(regex.toRegex(), runner)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment