1

这是我的字符串:

<link href="/post?page=4&amp;tags=example" rel="last" title="Last Page">

从那里我试图使用这个正则表达式获取该参数的4输出:page

link href="/post?page=(.*?)&amp;tags=(.*?)" rel="last"

然后我将收集第一组中的 4 个,tags 参数有一个通配符,因为内容可以改变。但是,我似乎没有与此匹配,有人可以帮忙吗?

而且我知道我不应该使用正则表达式来解析 HTML,但这只是一件小事,为此导入一个巨大的模块是一种浪费。

4

4 回答 4

3

假设您使用的是/regex literal/,则需要/将该路径中的 转义为\/

或者,这取决于您如何获取此字符串。它真的是这样输入的,还是你要再次读出的 innerHTML 的一部分?如果是这种情况,那么 innerHTML 将不是您期望的那样,因为浏览器会将其“规范化”。

如果它是一个innerHTML,那么获取标签会容易得多,然后获取标签的href属性,然后对其进行正则表达式。

于 2012-06-16T14:44:50.480 回答
1

我认为将您的捕获组更改为稍微不同的东西可能会更好,但会将所有内容都赶上终止角色:

link href="/post?page=([^&]+)&amp;tags=([^\"]+)" rel="last"

在字符组中首先使用否定字符告诉正则表达式引擎“捕获除此处列出的字符之外的所有字符”。这使得捕获所有内容变得非常容易,直到它遇到终止字符,例如&符号和双引号。假设您使用的是 PHP 或 Java,这也应该会稍微提高正则表达式的性能。

于 2012-06-16T14:43:27.383 回答
1

link href="/post\?page=(.*?)&amp;tags=(.*?)" rel="last"
你之前忘记了斜线?

于 2012-06-16T14:43:29.890 回答
0

如果page参数总是先出现,请尝试PCRE /\?page=(\d+)/。匹配组 1 将包含页码。

于 2012-06-16T14:42:55.490 回答