java match url_Java Regex:如何匹配URL路径?(Java Regex: How to Match URL Path?)

仰城
2023-12-01

Java Regex:如何匹配URL路径?(Java Regex: How to Match URL Path?)

我试图提取URL路径的第一部分。 例如:从http://foo.com/bar/1/2/3我想提取bar 。 这是我正在使用的代码:

private static String getFirstPartOfPath(String url)

{

Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/*$");

Matcher matcher = pattern.matcher(url);

if(matcher.find())

{

System.out.println(matcher.group(1));

}

return null;

}

但是,这与上面列出的最琐碎的网址不匹配,如

public static void main(String[] args)

{

getFirstPartOfPath("http://foo.com/bar/1/2/3");

}

没有打印。 乍一看,模式字符串看起来很清晰,就像它显然应该工作一样。 出了什么问题?

I am trying to extract the first part of the path of a URL. For example: from http://foo.com/bar/1/2/3 I want to extract bar. Here is the code I am using:

private static String getFirstPartOfPath(String url)

{

Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/*$");

Matcher matcher = pattern.matcher(url);

if(matcher.find())

{

System.out.println(matcher.group(1));

}

return null;

}

However, this does not match the most trivial url listed above, as in

public static void main(String[] args)

{

getFirstPartOfPath("http://foo.com/bar/1/2/3");

}

prints nothing. At first glance the pattern string seems clear and like it should obviously work. What is going wrong?

原文:https://stackoverflow.com/questions/24538991

2019-12-06 13:12

满意答案

不匹配,因为你的正则表达式不正确。 最后/*与/.* 。

使用这个正则表达式:

Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/.*$");

或删除锚$ :

Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/");

Not matching because your regex is not correct. You have /* in the end that is not same as /.*.

Use this regex:

Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/.*$");

Or remove anchor $:

Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/");

2014-07-02

相关问答

的System.Uri var uri = new Uri("http://www.domain.com/path/to/page1.html?query=value#fragment");

Console.WriteLine(uri.Scheme); // http

Console.WriteLine(uri.Host); // www.domain.com

Console.WriteLine(uri.AbsolutePath); // /path/to/page1.html

Console....

见本说明 : Express Route Tester是一个用于测试基本Express路由的便捷工具,但它不支持模式匹配 。 正则表达式可以使用以下Express语法: app.get(/\/public\/.*/, function(req, res) {

res.send('/\/public\/.*/');

});

但是,似乎您可以使用更简单的通配符模式与route.route : router.route('/public/*')

其中*匹配任何0+个字符。 See this...

尝试这个: (http:(?![^"\s]*google)[^"\s]+)["\s]

之前发布的解决方案的主要区别在于我控制匹配的长度以进行搜索。 Try this: (http:(?![^"\s]*google)[^"\s]+)["\s]

The key difference to the solutions posted earlier is that I control the length of the match for searching.

您可以使/.*可选。 使用 perl -pe 's|^.*/branches/([^/]*)(?:/.*)?$|$1|'

要么 sed 's|^.*/branches/\([^/]*\)\(/.*\)\?$|\1|'

或者,如果你能负担得起GNU grep : grep -oP '/branches/\K[^/]+'

(?:/.*)? 部分匹配1或0次出现的a /后跟除了换行符之外的任何0+字符。 sed解决方案是相同的,只是元字符被转义,因为它是符合BRE POSIX的模式。 在grep解...

我找到了答案。 when()语句的顺序和状态定义很重要。 这工作: $urlRouterProvider

.when('', '/events')

.when('/', '/events')

.when('/results', '/events/results')

$stateProvider

.state('events', {

......

}

$urlRouterProvider // This needs to be at the end t...

:(.*)/? 模式匹配第一个: ,然后贪婪地用.*抓住整行,并且不需要做任何其他事情但是从/?返回匹配/? 匹配空字符串( /?匹配1或0 /符号)。 您可以使用否定字符类[^\/]+ : :([^\/]+)

细节: : - 冒号 ([^\/]+) - 除了/ 1+个字符 请参阅正则表达式演示 。 The :(.*)/? pattern matches the first :, then grabs the whole line greedily with .* and does not ha...

这是一种方法。 匹配正斜杠的每个实例,后跟一个或多个非正斜杠的字符,然后匹配其中的一个或多个实例。 保持匹配,直到我们找到一个正斜杠的实例,然后只有非正斜杠字符(负向前瞻)。 ((?:\/[^\/]+)+)(?=\/[^\/]+)

我在整个事情中放置了一个捕获组,因为它似乎想要捕获捕获组中的结果(你的正则表达式包含在parens中)。 我正在使用非捕获组来进行内部正则表达式:(?:)因为我们不需要捕获这个组。 请参阅: 什么是非捕获组? 问号后跟冒号(?:)是什么意思? Here's one a...

你几乎做对了,但需要做一些小的调整。 考虑这个正则表达式: #[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*(?!\w*\.)

现场演示: http : //www.rubular.com/r/kJbSJKHhtv 翻译为Java: (?i)#[a-z_$][\\w$]*(?:\\.[a-z_$][\\w$]*)*(?!\\w*\\.)

You almost got it right but some minor adjustments are needed. ...

不匹配,因为你的正则表达式不正确。 最后/*与/.* 。 使用这个正则表达式: Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/.*$");

或删除锚$ : Pattern pattern = Pattern.compile("^https?://[^/]+/([^/]+)/");

Not matching because your regex is not correct. You have /* in the end t...

您可以使用类似的东西: \/new-doctors\/[az]{2}\/ ( 此处可用示例)。 表达式将匹配/new-doctors/后跟2( {2} )小写字母( [az] ),后跟另一个/。 You could use something like so: \/new-doctors\/[a-z]{2}\/ (example available here). The expression will match /new-doctors/ which is followed by 2 ({2})...

相关文章

今天碰到问题,url正则过滤老是出问题,不爽之下,又打开源码了。 Crawl.java里有这么一段

...

Sevlet2.4规范 可以支持 <jsp:include page="URL&quo

...

c:url标签输出一个url地址 c:url语法:

...

在java中我需要将搜索引擎的url转化为他原来的地址。。 google编码方式utf-8: ht

...

John Smart——敏捷开发的狂热追随者 http://www.ibm.com/developer

...

今天在第一次对Solr的UI Console进行Add Core操作的时候,用了默认选项,提交后页面无

...

在编写后台登陆模块时,将许多默认的设置放在一个名为default的package 里。然后再定义其他

...

最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net

...

js对文字进行url编码涉及3个函数:escape,encodeURI,encodeURICompon

...

最新问答

如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re

第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型

这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;

问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是

我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar

Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/

你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV

12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar

这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定

 类似资料: