我有一个网址:
https://widgets.shopifyapps.com/channel_admin/embeds/new?id=1243326021&product_handle=s-n-ph-m-4&product_name=S%25E1%25BA%25A3n%2520ph%25E1%25BA%25A9m%25204&first_variant_id=3897975749
我想使用正则表达式来获取域和路径。
我试过遵循正则表达式语法:(?:https?://)?(?:www\.)?([A-Za-z0-9._%+-]+)/?.*"
其中有以下输出:widgets.shopifyapps.com
但是,我想输出:widgets.shopifyapps.com/channel_admin/embeds/new
我正在使用Scala。请帮我解压缩上面的域名。谢谢!
答案 0 :(得分:0)
有几种方法可以实现这一目标。一个是使用Java URL
类(demo)的非正则表达式:
import java.net.URL;
object Main extends App {
val a_url = new URL("https://widgets.shopifyapps.com/channel_admin/embeds/new?id=1243326021&product_handle=s-n-ph-m-4&product_name=S%25E1%25BA%25A3n%2520ph%25E1%25BA%25A9m%25204&first_variant_id=3897975749");
print(s"${a_url.getHost()}${a_url.getPath()}");
}
或者,您可以使用匹配正则表达式.*?://([^?]+).*
并获取第1组内容:
val a_url = "https://widgets.shopifyapps.com/channel_admin/embeds/new?id=1243326021&product_handle=s-n-ph-m-4&product_name=S%25E1%25BA%25A3n%2520ph%25E1%25BA%25A9m%25204&first_variant_id=3897975749";
val pattern = """.*?://([^?]+).*""".r
a_url match {
case pattern(myval) => println(myval)
case _ =>
}
请参阅此Scala demo
或具有正向前瞻性的变体:
val a_url = "https://widgets.shopifyapps.com/channel_admin/embeds/new?id=1243326021&product_handle=s-n-ph-m-4&product_name=S%25E1%25BA%25A3n%2520ph%25E1%25BA%25A9m%25204&first_variant_id=3897975749";
val myval = """(?<=://)[^?]+""".r.findFirstIn(a_url).getOrElse("")
println(myval)