Regex 用正则表达式提取字符串部分

Regex 用正则表达式提取字符串部分,regex,Regex,这是一个字符串: http://news.ycombinator.com/page?vasya=pupkin&b=b news.ycombinator.com/page news.ycombinator.com/page.php news.ycombinator.com/page 我正在提取带有页面的主机。因此,我编写了以下正则表达式: ([a-zA-Z0-9\.]*[a-zA-Z0-9]+[^\/][\.][a-zA-Z0-9\/\.]+) 它返回以下内容(粗体): http://news

这是一个字符串:
http://news.ycombinator.com/page?vasya=pupkin&b=b  news.ycombinator.com/page news.ycombinator.com/page.php news.ycombinator.com/page

我正在提取带有页面的主机。因此,我编写了以下正则表达式:

([a-zA-Z0-9\.]*[a-zA-Z0-9]+[^\/][\.][a-zA-Z0-9\/\.]+)
它返回以下内容(粗体):

http://news.ycombinator.com/page?vasya=pupkin&bnews.ycombinator.com/pagenews.ycombinator.com/page.phpnews.ycombinator.com/page

这不正是我需要的。在以下字符串的情况下,Regexp不应看到带有页面的主机:
http://news.ycombinator.com/page?vasya=pupkin&b=b
,因为它是一个链接,应该区别对待

应拒绝:

"http://news.ycombinator.com/page?vasya=pupkin&b=b", "http://news.ycombinator.com/page", "http://news.ycombinator.com/","http://news.ycombinator.com". 
"news.ycombinator.com/page","news.ycombinator.com/page.php", "news.ycombinator.com/page/index", "news.ycombinator.com/page/index.php"
不应拒绝:

"http://news.ycombinator.com/page?vasya=pupkin&b=b", "http://news.ycombinator.com/page", "http://news.ycombinator.com/","http://news.ycombinator.com". 
"news.ycombinator.com/page","news.ycombinator.com/page.php", "news.ycombinator.com/page/index", "news.ycombinator.com/page/index.php"

如何改进此regexp,使其仅能选择附近没有单词字符的字符串部分?

我不确定您使用什么来执行正则表达式,但实际上您已经解决了自己的问题-您只需要正则表达式来匹配整个单词。这取决于您正在使用的程序,但这是一个guidleine(posix风格的正则表达式):


在第二种情况下,您必须确保内部组是用于非捕获组的。

让自己出局-您确定主机是什么意思吗?可选的http://位于一些用点分隔的单词之前,这些单词使主机名http://成为协议,然后转到主机,然后在“/”之后翻页。之后我们有url参数。事实上,这并不重要。主要问题是粗体的。我看到的唯一区别是您提到的url包含查询部分。是否要排除带有查询的URL?不应同时提取带有查询的URL。另一个区别是协议(“http://”)