Regex 正则表达式PCRE:是否跳过前n个事件?
使用PCRE regex时,是否有方法跳过前n个事件?我看到了一些使用\K的示例,但我不知道如何使用它 目标是找到“px”值,因此这是我使用的正则表达式: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标志,该标志也使匹配换
(?!1px)(\d+)(px)
(?!1px)用于忽略“1px”
考虑到下面的示例字符串,如何跳过第一个(12px)或第二个(4px)匹配,只匹配第三个(2px)
你可以用
(?s)^(?:.*?\b(?!1p)\d+px){2}.*?\K\b(?!1p)(\d+)(px)
见
详细信息
-DOTALL(?s)
标志,该标志也使s
匹配换行符
-字符串的开头^
-任何0个或多个字符(尽可能少)正好出现两次,然后是1+位+(?:.*\b(?!1p)\d+px){2}
但px
值1px
-任何0+字符,尽可能少*?
-丢弃到目前为止匹配的文本\K
-单词边界\b
-右侧不允许立即出现(?!1p)
1p
-1+位在第1组中捕获,而(\d+)(px)
位在第2组中捕获px
(?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)