【问题标题】:regex only very specific match with two similar URLs before the capture正则表达式仅在捕获之前与两个相似的 URL 进行非常具体的匹配
【发布时间】:2012-09-25 14:03:49
【问题描述】:

因此,我尝试仅提取特定图像的名称以及随之捕获的图像扩展名。唯一的问题是有两种非常相似的形式,而两种形式只是图片url的显示方式。

第一个网址是这样显示的

http://www.trollface.com/dolan/images/IMGnameEYEwant.jpg

唯一的问题是有时图像也会以这种方式显示:

http://www.trollface.com/dolan/images/small/IMGnameEYEwant.jpg

现在我知道这无论如何都不优雅,但我必须使用这样的东西:

trollface\.com/dolan/images/(.*?)">

由于这两个 URL 非常相似,到目前为止这一直运行良好

另一个问题是 我需要纯正则表达式的解决方案。没有 java、php、javascript 什么都没有。 甚至试图让它像这样事先尝试每个字母组合,我再次知道这是非常糟糕的方法,但我是一个正则表达式菜鸟:

[ao][gr]e[s/][/i][pm][ra][og][de][us][c/][tp][/r][so][md][au][lc][lt]/(.*?)">

唯一的问题是它总是会首先找到第一个 URL,因为它们非常相似,并且总是会捕获我不需要的 URL 的small/ 部分。

我该怎么做?我在想也许是向前看或向后看,但我没有足够的经验来让这些工作。

编辑: 核心是基于 Java 的,但在当前情况下,我无法使用 Java 来解决这个问题 :(

【问题讨论】:

  • 您使用的语言至关重要。
  • 已编辑以解决此问题,但我相信它不会有所作为,因为我将无法操作 java 代码。我想格式会有点不同,所以这可能很重要

标签: java regex regex-lookarounds


【解决方案1】:
#http://www.trollface.com/dolan/images/(?:small/)?([^/\#]+)#

正则表达式的解释,在文字匹配之后:

(?: ... )

非捕获组。意思是“匹配这个,但不要传回去。”

... ?

将上一组设为可选。

(  ... )

一个捕获组

[^/\#]+

任何不是正斜杠或井号标签的字符,一次或多次。您可能不需要在 Java 中转义它。

【讨论】:

  • 完美。也感谢您的精彩解释!当它让我在三分钟内接受你的答案时!将来肯定会使用(?: ... )?。 ^_^
【解决方案2】:
var test1="http://www.trollface.com/dolan/images/IMGnameEYEwant.jpg";
var test2="http://www.trollface.com/dolan/images/small/IMGnameEYEwant.jpg";
var test3="http://google.com/";

var rx = /(http:\/\/www\.trollface\.com\/dolan\/images\/)(?:small)?(.+)/i;

var m = test1.match(rx);
if(m.length == 3) {
    alert(m[1]);
    alert(m[2]);
}
var m = test2.match(rx);
if(m.length == 3) {
    alert(m[1]);
    alert(m[2]);
}
var m = test3.match(rx);
if(m.length == 3) {
    alert(m[1]);
    alert(m[2]);
}

【讨论】:

  • 如果我真的可以使用任何java,这个解决方案会起作用,但现在我不能。不过感谢您的回答!所有其他信息都必须帮助某人! (/^_^)/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
相关资源
最近更新 更多