Regex 正则表达式PCRE:是否跳过前n个事件?

Regex 正则表达式PCRE:是否跳过前n个事件?,regex,pcre,regex-lookarounds,regex-group,Regex,Pcre,Regex Lookarounds,Regex Group,使用PCRE regex时,是否有方法跳过前n个事件?我看到了一些使用\K的示例,但我不知道如何使用它 目标是找到“px”值,因此这是我使用的正则表达式: (?!1px)(\d+)(px) (?!1px)用于忽略“1px” 考虑到下面的示例字符串,如何跳过第一个(12px)或第二个(4px)匹配,只匹配第三个(2px) 你可以用 (?s)^(?:.*?\b(?!1p)\d+px){2}.*?\K\b(?!1p)(\d+)(px) 见 详细信息 (?s)-DOTALLs标志,该标志也使匹配换

使用PCRE regex时,是否有方法跳过前n个事件?我看到了一些使用\K的示例,但我不知道如何使用它

目标是找到“px”值,因此这是我使用的正则表达式:

(?!1px)(\d+)(px)
(?!1px)用于忽略“1px”

考虑到下面的示例字符串,如何跳过第一个(12px)或第二个(4px)匹配,只匹配第三个(2px

你可以用

(?s)^(?:.*?\b(?!1p)\d+px){2}.*?\K\b(?!1p)(\d+)(px)

详细信息

  • (?s)
    -DOTALL
    s
    标志,该标志也使
    匹配换行符
  • ^
    -字符串的开头
  • (?:.*\b(?!1p)\d+px){2}
    -任何0个或多个字符(尽可能少)正好出现两次,然后是1+位+
    px
    1px
  • *?
    -任何0+字符,尽可能少
  • \K
    -丢弃到目前为止匹配的文本
  • \b
    -单词边界
  • (?!1p)
    -右侧不允许立即出现
    1p
  • (\d+)(px)
    -1+位在第1组中捕获,而
    px
    位在第2组中捕获

或,
(?s)^(?:*?\b(?!1p)\d+px{2}.*\K\b(?!1p)\d+px
,请参阅。@WiktorStribiżew由于OP提到的是第一个(12px)或第二个(4px),我认为您的答案是正确的。您可以发布:-)Wiktor Stribiżew中的一个很好,即使我更改{x}值,以更改要跳过的事件数。当更改{x}值时,第四只鸟给出的结果返回奇怪的结果。但是它们都失去了我的捕获组(\d+)(px),我需要它们(对不起,我的问题应该更准确)@Zax如果你不想用“跳过n次发生”来操作,而是用“查找n次发生”来操作,那么你可以使用:
^(?s)(?:.\b\K(?!1p)(\d+(px)){3}
现在图括号中的数字{3}是指“匹配第三次出现”。
(?s)^(?:.*?\b(?!1p)\d+px){2}.*?\K\b(?!1p)(\d+)(px)