Scala Regex enable Multiline option
multiline, regex, scala
Solution
This is a very common problem when first using Scala Regex.
When you use pattern matching in Scala, it tries to match the whole string, as if you were using "^" and "$" (and did not activate multi-line parsing, which matches \n to ^ and $).
The way to do what you want would be one of the following:
def matchNode( value : String ) : Boolean =
(ScriptNode findFirstIn value) match {
case Some(v) => println( "found" + v ); true
case None => println("not found: " + value ) ; false
}
Which would find find the first instance of ScriptNode inside value, and return that instance as v (if you want the whole string, just print value). Or else:
val ScriptNode = new Regex("""(?s).*<com:Node>.*""")
def matchNode( value : String ) : Boolean =
value match {
case ScriptNode() => println( "found" + value ); true
case _ => println("not found: " + value ) ; false
}
Which would print all all value. In this example, (?s) activates dotall matching (ie, matching "." to new lines), and the .* before and after the searched-for pattern ensures it will match any string. If you wanted "v" as in the first example, you could do this:
val ScriptNode = new Regex("""(?s).*(<com:Node>).*""")
def matchNode( value : String ) : Boolean =
value match {
case ScriptNode(v) => println( "found" + v ); true
case _ => println("not found: " + value ) ; false
}
Problem
I'm learning Scala, so this is probably pretty noob-irific. I want to have a multiline regular expression. In Ruby it would be: ``` MY_REGEX = /com:Node/m ``` My Scala looks like: ``` val ScriptNode = new Regex("""<com:Node>""") ``` Here's my match function: ``` def matchNode( value : String ) : Boolean = value match { case ScriptNode() => System.out.println( "found" + value ); true case _ => System.out.println("not found: " + value ) ; false } ``` And I'm calling it like so: ``` matchNode( "<root>\n<com:Node>\n</root>" ) // doesn't work matchNode( "<com:Node>" ) // works ``` I've tried: ``` val ScriptNode = new Regex("""<com:Node>?m""") ``` And I'd really like to avoid having to use java.util.regex.Pattern. Any tips greatly appreciated.