2

我真的是 RegEx 的主要新手,可以提供一些帮助。

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

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 位的 URL?我想基本上我正在寻找的是一种按顺序返回包含一组特定字母和 / 的整个单词的方法。

TIA

4

3 回答 3

2

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

编辑:要获得完整的行,请使用:

preg_match("%^.*?/find/.*$%m",$input);
于 2012-08-06T22:46:18.110 回答
1

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

您可以输入示例列表(如上面的列表)并使用调色板创建 RegExp 并实时测试它。该程序可在线获取,也可作为可下载的 Adob​​e AIR 包获取。

不幸的是,我现在无法访问他们的网站,所以我附上了可下载版本的 AIR 包

我真的向你推荐这个,因为它可以帮助像我这样的 RegExp 新手设计最复杂的模式。

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

\/find\/

如果您想获得是/否结果(即,如果它包含或不包含),则顺利/find/,否则获得全行使用

.*\/find\/.*
于 2012-08-06T23:16:50.937 回答
0

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

绝不是一个详尽的 URI 正则表达式,但这是一个很好的起点。我在关键点添加了一些选项,例如.com.net.org。实际上,由于缺乏一致性,您将很难将 URI 与正则表达式匹配,但您可以非常接近

来自上述链接的正则表达式:

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

于 2012-08-06T22:58:27.433 回答