我有一个像" httpx:// __ URL __ / __ STUFF__?param = value" 这个样本按照惯例是一个网址......它可以是任何包含零个或多个__X__标记的内容。
我想使用正则表达式来提取所有标记的列表,因此这里的输出将是List(" __ URL __"," __ STUFF __")。请记住,我事先并不知道输入字符串中可能有多少(如果有)令牌。
我一直在努力但却无法想出一个可以解决问题的正则表达式。
这样的事情不起作用:
(?:??(__ [A-ZA-Z0-9] + __))+
答案 0 :(得分:3)
Scala Regex,它只是Java Regex的包装器,永远不会返回多个子组进行重复。
关于它的唯一方法是为令牌设置一个正则表达式,然后多次找到它。你几乎已经拥有了你想要的一切:
"__[a-zA-Z0-9]+__".r findAllIn "httpx://__URL__/__STUFF__?param=value"
返回Iterator
。使用.toSeq
或类似内容转换为集合。
答案 1 :(得分:1)
_+[^_]+_+
这将匹配所有__TOKENS__
它不会检查?params之后的任何__TOKENLIKE__
字符串,但是你已经提到过你不仅仅使用它来表示网址。如果您需要进行一些改进,请告诉我们。
答案 2 :(得分:0)
将正则表达式与split
:
def urlPathComponents(s: String): Option[Array[String]] =
"""(?<=http(s?)://)[^?]+""".r findFirstIn s map (_.split("/"))