【问题标题】:Extract URL containing /find/ from numerous URL's?从众多 URL 中提取包含 /find/ 的 URL?
【发布时间】:2012-08-06 22:43:03
【问题描述】:

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

我有一个包含大量 URL 和其他文本的长字符串,其中一个 URL 包含 /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

我将使用哪种 RegEx 来返回该列表中第 3 位的 URL,但也不返回第 5 位的 URL?我想基本上我正在寻找的是一种按顺序返回包含一组特定字母和 / 的整个单词的方法。

TIA

【问题讨论】:

  • 数据是如何存储的?在数组中?
  • 带有换行符的长字符串?我认为它没有行号...

标签: php regex


【解决方案1】:

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

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

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

【讨论】:

  • 如果这就是他想要的全部,strpos() 将完成这项工作。我怀疑他想提取整个 URL,除非 URL 被非常严格地定义,否则这显然更加棘手,因为 URL 中的潜在熵
  • 是的,我想要图案出现的整个单词。
  • @EricBanderhide 链接是否如您显示的那样显示,没有http://?他们总是在同一个域吗?
【解决方案2】:

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

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

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

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

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

\/find\/

如果您想获得是/否结果(即是否包含/find/)则很好,否则获得全行使用

.*\/find\/.*

【讨论】:

    【解决方案3】:

    除了 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

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 2014-01-14
      • 2012-02-12
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      相关资源
      最近更新 更多