【发布时间】:2020-06-10 11:56:45
【问题描述】:
使用 PCRE 正则表达式时,有没有办法跳过前 n 次出现?我看到了一些带有 \K 的例子,但我不明白如何使用它。
目标是找到“px”值,所以这是我使用的正则表达式:
(?!1px)(\d+)(px)
(?!1px) 用于忽略“1px”。
考虑到以下示例字符串,我如何跳过第一个 (12px) 或第二个 (4px) 匹配,只匹配第三个 (2px )?
* {margin: 0; padding: 0; font-size: 12px; color: #555;}
.test {
display: inline-block;
border: 1px solid #000;
box-shadow: #aaa 4px 2px 6px;
width: 36px;
height: 24px;
}
【问题讨论】:
-
或者,
(?s)^(?:.*?\b(?!1p)\d+px){2}.*?\K\b(?!1p)\d+px,见demo。 -
@WiktorStribiżew 正如 OP 提到的第一个(12px)或第二个(4px),我认为你的答案是正确的。你可以发布它:-)
-
Wiktor Stribiżew 的那个工作正常,即使我更改了 {x} 值,以更改要跳过的出现次数。改变 {x} 值时,第四只鸟给出的返回奇怪的结果。但是他们都失去了我的捕获组(\d+)(px),我需要他们(对不起,我的问题应该更准确)
标签: regex pcre regex-lookarounds regex-group