Question:
I get this issue for several hours.
Why (HP)(A)->H
does NOT match [^a-zA-Z0-9]A[^a-zA-Z0-9]
in Kotlin?
regexr website
Expression1
/[^a-zA-Z0-9]A[^a-zA-Z0-9]/g
Text
(HP)(A)->H
Result
(A)
Expression2
/[^a-zA-Z0-9]A[^a-zA-Z0-9]/gy
Text
(HP)(A)->H
Result
no result
Regex
class in Kotlin
In VSC
Code
test1.kt
<code>fun exactlyMatch(target:String,entryForReplacement:Pair<String,String>){
val nonLetterOrDigit = "[^a-zA-Z0-9]"
val (key,value) = entryForReplacement
val keyRegexString = nonLetterOrDigit + key + nonLetterOrDigit
val keyRegEx = Regex(keyRegexString)
val matched = keyRegEx.matches(target)
println("target:${target},key:${key},value:${value},keyRegEx.pattern:${keyRegEx.pattern},matched:${matched}")
val target = "(HP)(A)->H"
val mapForReplacement : Map<String,String> = mapOf("A" to "Aura:Green","HP" to "HP:75","H" to "healthStatus")
val mapForReplacementList = mapForReplacement.toList()
println("mapForReplacementList:${mapForReplacementList}")
var entryForReplacement: Pair<String,String>
for(entryForReplacement in mapForReplacementList){
exactlyMatch(target,entryForReplacement)
<code>fun exactlyMatch(target:String,entryForReplacement:Pair<String,String>){
val nonLetterOrDigit = "[^a-zA-Z0-9]"
val (key,value) = entryForReplacement
val keyRegexString = nonLetterOrDigit + key + nonLetterOrDigit
val keyRegEx = Regex(keyRegexString)
val matched = keyRegEx.matches(target)
println("target:${target},key:${key},value:${value},keyRegEx.pattern:${keyRegEx.pattern},matched:${matched}")
}
fun main(){
val target = "(HP)(A)->H"
val mapForReplacement : Map<String,String> = mapOf("A" to "Aura:Green","HP" to "HP:75","H" to "healthStatus")
val mapForReplacementList = mapForReplacement.toList()
println("mapForReplacementList:${mapForReplacementList}")
var entryForReplacement: Pair<String,String>
for(entryForReplacement in mapForReplacementList){
exactlyMatch(target,entryForReplacement)
}
}
</code>
fun exactlyMatch(target:String,entryForReplacement:Pair<String,String>){
val nonLetterOrDigit = "[^a-zA-Z0-9]"
val (key,value) = entryForReplacement
val keyRegexString = nonLetterOrDigit + key + nonLetterOrDigit
val keyRegEx = Regex(keyRegexString)
val matched = keyRegEx.matches(target)
println("target:${target},key:${key},value:${value},keyRegEx.pattern:${keyRegEx.pattern},matched:${matched}")
}
fun main(){
val target = "(HP)(A)->H"
val mapForReplacement : Map<String,String> = mapOf("A" to "Aura:Green","HP" to "HP:75","H" to "healthStatus")
val mapForReplacementList = mapForReplacement.toList()
println("mapForReplacementList:${mapForReplacementList}")
var entryForReplacement: Pair<String,String>
for(entryForReplacement in mapForReplacementList){
exactlyMatch(target,entryForReplacement)
}
}
Result after execution
<code> PS C:Users{USERNAME}OneDrive桌面TibaMeKotlinTHE BIG NERD RANCH GUIDECH3> kotlinc test1.kt -include-runtime -d test1.jar
PS C:Users{USERNAME}OneDrive桌面TibaMeKotlinTHE BIG NERD RANCH GUIDECH3> java -jar test1.jar
mapForReplacementList:[(A, Aura:Green), (HP, HP:75), (H, healthStatus)]
target:(HP)(A)->H,key:A,value:Aura:Green,keyRegEx.pattern:[^a-zA-Z0-9]A[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:HP,value:HP:75,keyRegEx.pattern:[^a-zA-Z0-9]HP[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:H,value:healthStatus,keyRegEx.pattern:[^a-zA-Z0-9]H[^a-zA-Z0-9],matched:false
<code> PS C:Users{USERNAME}OneDrive桌面TibaMeKotlinTHE BIG NERD RANCH GUIDECH3> kotlinc test1.kt -include-runtime -d test1.jar
PS C:Users{USERNAME}OneDrive桌面TibaMeKotlinTHE BIG NERD RANCH GUIDECH3> java -jar test1.jar
mapForReplacementList:[(A, Aura:Green), (HP, HP:75), (H, healthStatus)]
target:(HP)(A)->H,key:A,value:Aura:Green,keyRegEx.pattern:[^a-zA-Z0-9]A[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:HP,value:HP:75,keyRegEx.pattern:[^a-zA-Z0-9]HP[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:H,value:healthStatus,keyRegEx.pattern:[^a-zA-Z0-9]H[^a-zA-Z0-9],matched:false
</code>
PS C:Users{USERNAME}OneDrive桌面TibaMeKotlinTHE BIG NERD RANCH GUIDECH3> kotlinc test1.kt -include-runtime -d test1.jar
PS C:Users{USERNAME}OneDrive桌面TibaMeKotlinTHE BIG NERD RANCH GUIDECH3> java -jar test1.jar
mapForReplacementList:[(A, Aura:Green), (HP, HP:75), (H, healthStatus)]
target:(HP)(A)->H,key:A,value:Aura:Green,keyRegEx.pattern:[^a-zA-Z0-9]A[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:HP,value:HP:75,keyRegEx.pattern:[^a-zA-Z0-9]HP[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:H,value:healthStatus,keyRegEx.pattern:[^a-zA-Z0-9]H[^a-zA-Z0-9],matched:false
[]
(https://i.sstatic.net/oJ2amRsA.png)
In Kotlin online active shell
Code
<code>fun exactlyMatch(target:String,entryForReplacement:Pair<String,String>){
val nonLetterOrDigit = "[^a-zA-Z0-9]"
val (key,value) = entryForReplacement
val keyRegexString = nonLetterOrDigit + key + nonLetterOrDigit
val keyRegEx = Regex(keyRegexString)
val matched = keyRegEx.matches(target)
println("target:${target},key:${key},value:${value},keyRegEx.pattern:${keyRegEx.pattern},matched:${matched}")
val target = "(HP)(A)->H"
val mapForReplacement : Map<String,String> = mapOf("A" to "Aura:Green","HP" to "HP:75","H" to "healthStatus")
val mapForReplacementList = mapForReplacement.toList()
println("mapForReplacementList:${mapForReplacementList}")
var entryForReplacement: Pair<String,String>
for(entryForReplacement in mapForReplacementList){
exactlyMatch(target,entryForReplacement)
<code>fun exactlyMatch(target:String,entryForReplacement:Pair<String,String>){
val nonLetterOrDigit = "[^a-zA-Z0-9]"
val (key,value) = entryForReplacement
val keyRegexString = nonLetterOrDigit + key + nonLetterOrDigit
val keyRegEx = Regex(keyRegexString)
val matched = keyRegEx.matches(target)
println("target:${target},key:${key},value:${value},keyRegEx.pattern:${keyRegEx.pattern},matched:${matched}")
}
fun main(){
val target = "(HP)(A)->H"
val mapForReplacement : Map<String,String> = mapOf("A" to "Aura:Green","HP" to "HP:75","H" to "healthStatus")
val mapForReplacementList = mapForReplacement.toList()
println("mapForReplacementList:${mapForReplacementList}")
var entryForReplacement: Pair<String,String>
for(entryForReplacement in mapForReplacementList){
exactlyMatch(target,entryForReplacement)
}
}
main()
</code>
fun exactlyMatch(target:String,entryForReplacement:Pair<String,String>){
val nonLetterOrDigit = "[^a-zA-Z0-9]"
val (key,value) = entryForReplacement
val keyRegexString = nonLetterOrDigit + key + nonLetterOrDigit
val keyRegEx = Regex(keyRegexString)
val matched = keyRegEx.matches(target)
println("target:${target},key:${key},value:${value},keyRegEx.pattern:${keyRegEx.pattern},matched:${matched}")
}
fun main(){
val target = "(HP)(A)->H"
val mapForReplacement : Map<String,String> = mapOf("A" to "Aura:Green","HP" to "HP:75","H" to "healthStatus")
val mapForReplacementList = mapForReplacement.toList()
println("mapForReplacementList:${mapForReplacementList}")
var entryForReplacement: Pair<String,String>
for(entryForReplacement in mapForReplacementList){
exactlyMatch(target,entryForReplacement)
}
}
main()
Result after execution
<code> mapForReplacementList:[(A, Aura:Green), (HP, HP:75), (H, healthStatus)]
target:(HP)(A)->H,key:A,value:Aura:Green,keyRegEx.pattern:[^a-zA-Z0-9]A[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:HP,value:HP:75,keyRegEx.pattern:[^a-zA-Z0-9]HP[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:H,value:healthStatus,keyRegEx.pattern:[^a-zA-Z0-9]H[^a-zA-Z0-9],matched:false
<code> mapForReplacementList:[(A, Aura:Green), (HP, HP:75), (H, healthStatus)]
target:(HP)(A)->H,key:A,value:Aura:Green,keyRegEx.pattern:[^a-zA-Z0-9]A[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:HP,value:HP:75,keyRegEx.pattern:[^a-zA-Z0-9]HP[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:H,value:healthStatus,keyRegEx.pattern:[^a-zA-Z0-9]H[^a-zA-Z0-9],matched:false
</code>
mapForReplacementList:[(A, Aura:Green), (HP, HP:75), (H, healthStatus)]
target:(HP)(A)->H,key:A,value:Aura:Green,keyRegEx.pattern:[^a-zA-Z0-9]A[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:HP,value:HP:75,keyRegEx.pattern:[^a-zA-Z0-9]HP[^a-zA-Z0-9],matched:false
target:(HP)(A)->H,key:H,value:healthStatus,keyRegEx.pattern:[^a-zA-Z0-9]H[^a-zA-Z0-9],matched:false
[]
Other info
IDE: VSC
Kotlin plugin: []
What I tried?
-
I have test these expression in regexr website.
-
Kotlin docs
Also, I visit Kotlin API reference to know how to use them.