объявление События добавляет слой абстракции и защиты на делегат экземпляр. Эта защита препятствует тому, чтобы клиенты делегата сбросили делегата и ее список вызова и только позволяет добавлять или удалять цели из списка вызова.
Как сказал Алекс , при использовании сопоставления с образцом для извлечения полей из регулярных выражений образец действует так, как если бы он был ограничен (т. Е. С использованием ^
и $
). Обычный способ избежать этой проблемы - сначала использовать findAllIn
. Таким образом:
val input = """some text
|begin {
| content to extract
| content to extract
|}
|some text
|begin {
| other content to extract
|}
|some text""".stripMargin
val Block = """(?s)begin \{(.*)\}""".r
Block findAllIn input foreach (_ match {
case Block(content) => println(content)
case _ => println("NO MATCH")
})
В противном случае вы можете использовать . *
в начале и в конце, чтобы обойти это ограничение:
val Block = """(?s).*begin \{(.*)\}.*""".r
input match {
case Block(content) => println(content)
case _ => println("NO MATCH")
}
Кстати, вы, вероятно, захотите неактивный сопоставитель:
val Block = """(?s)begin \{(.*?)\}""".r
Block findAllIn input foreach (_ match {
case Block(content) => println(content)
case _ => println("NO MATCH")
})
Я считаю, что при сопоставлении требуется имплицитность полного совпадения. Ваше совпадение эквивалентно:
val Block = """^(?s).*begin \{(.*)\}$""".r
Это сработает, если вы добавите. * В конец:
val Block = """(?s).*begin \{(.*)\}.*""".r
Мне не удалось найти никакой документации по этому поводу, но я столкнулся с той же проблемой.