正则表达式或解析只获取域并忽略其他所有内容

时间:2015-09-03 22:54:45

标签: regex parsing

我在这里度过了一段艰难时期。我已经在堆栈溢出搜索了很多,有一些解决方案声称这样做,但没有一个满足我的需要。看看我到目前为止的尝试,我不清楚他们为什么不工作。他们在这里:

[^A-Za-z]{3,9}(?:\/\/){0,1}(?:www\.)?(.+)(?:[\/:?])

(?:https?\:\/\/)(?:www.?)([^\/:?#]+)(?:[\/:?#]|$)

(?::\/\/?)(?:www\.?)(.[^\/:?]+)

我需要获得基本域名。这些问题是他们无法匹配我真正需要能够匹配的一个案例。我拥有的只是一个域名。测试数据:

http://www.bing.com/search?q=hola
http://www.bing.com/
http://www.bing.com:80/
http://www.bing.com:80
bing.com:80
bing.com
a@gmail.com
Flappy Bird
127.4.4.4
140BBAA7-2654-4424-9C7C-6828ECBDA177

我应该有六场比赛。所有人都说bing.com。但是,我的测试数据中的最后两个bing条目根本不匹配。这里有什么指示?老实说,甚至不需要正则表达式,但我还需要确保其特定域名,所以我认为这将是更好的解决方案。谢谢。

1 个答案:

答案 0 :(得分:1)

好吧,在Perl语法中,这会提取所有bing.com并拒绝除了一个格式错误的示例之外的所有内容:

^(?:http:\/\/)?(?:[^:/.@]+\.)*([^:/.@]+\.[^:/.]+)(?:$|[:?/])

匹配127.4.4.4并提取4.4。要解决这个问题,你必须告诉我们为什么这是一个错误的答案。您可能希望使用单独的正则表达式明确匹配八位字节:

^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ 

并将其作为单独代码中的错误处理。

如果正则表达式在您的引擎中不起作用,您还必须告诉我们您正在使用哪个。正则表达式语法远非普遍。