2012-08-06 57 views
2

我真的是RegEx的主要新手,可以做一些帮助。从多个URL中提取包含/ find /的URL?

我有一个很长的字符串,包含大量的URL和其他文本,其中一个URL包含has/find /。即:

1. http://www.example.com/not/index.html 
2. http://www.example.com/sat/index.html 
3. http://www.example.com/find/index.html 
4. http://www.example.com/rat/mine.html 
5. http://www.example.com/mat/find.html 

我会用什么样的正则表达式的返回是在该列表中3号的URL,但不能退货我5号呢?我想基本上我正在寻找的是一种返回包含特定字母和/或顺序的整个单词的方式。

TIA

+0

数据如何存储?在数组中? – 2012-08-06 22:57:24

+0

只是一个很长的字符串。 – 2012-08-06 23:18:59

+0

带换行符的长字符串?我认为它没有行号... – 2012-08-06 23:26:49

回答

2

我会假设你想preg_match("%/find/%",$input);或相似。

编辑:为了获得完整的线,使用方法:

preg_match("%^.*?/find/.*$%m",$input); 
+1

如果这就是他想要的所有'strpos()'将完成这项工作。我怀疑他想提取整个网址,除非网址被严格定义,否则网址会变得更加棘手,因为网址中可能存在熵 – DaveRandom 2012-08-06 22:48:16

+0

是的,我希望模式出现在整个单词中。 – 2012-08-06 22:50:03

+0

那么在这种情况下,请参阅编辑。 – 2012-08-06 22:55:11

0

除了Kolink的回答,如果你想正则表达式匹配整个URI:

这是绝不的详尽的URI正则表达式,但是this is a good starting point。我在关键点投入了一些选项,如.com.net.org。在现实中你将有一个相当艰难的时间匹配正则表达式的URI由于缺乏合格的,但你可以非常接近

从上面的链接的正则表达式:

/(https?:\/\/)?(www\.)?([a-zA-Z0-9-_]+)\.(com|org|net)\/(find)\/([a-zA-Z0-9-_]+)\.(html|php|aspx)?/is

1

我可以建议您使用RegExr来生成正则表达式。

您可以键入样本列表(如上所示)并使用调色板创建RegExp并对其进行实时测试。该程序可在线和作为可下载的Adobe AIR软件包提供。

很抱歉,我现在无法访问他们的网站,所以我附上the AIR package of the downloadable version

我真的很推荐你,因为它帮助像我这样的RegExp新手设计出最复杂的图案。

但是,对于你的问题,我认为这只是

\/find\/ 

顺利,如果你想获得一个是/否的结果(即,如果它包含或不/find/),否则得到充分线上使用

.*\/find\/.*