[英]How to get all regex matches from substrings only with regex
我正在尝试从 html 中的 styles 属性中获取所有十六进制 colors,但不是其他十六进制颜色值。 真的这是我想了解的一项常见任务,所以我不想得到其他解决方案,只有正则表达式。 换句话说,我需要从受已知开始和结束模式限制的 substring 获取具有正则表达式模式(在这种情况下为十六进制颜色)的子字符串(style="substring to get values here")
我的模式
(?<=style=").*(#[A-F0-9]{6}).*(?=")
我的测试 html:
<span style="color: #FF0000;background-color: #FFFF99;font-family: Calibri;font-size: 11pt;font-weight: bold;font-style: normal">This shouldn't be in result #FFFF99</span>
<span style="color: #FF0000;background-color: #FFFF99;font-family: Calibri;font-size: 11pt;font-weight: bold;font-style: normal">This shouldn't be in result #FFFF99</span>
我只能用这种模式得到最后一个条目,但我需要得到所有。 (所以在我的示例中,我应该得到 4 个颜色值:第一个跨度为 2,第二个跨度为 2)。 我怎样才能实现它? 提前致谢!
如果支持正前瞻中的量词:
(?<=\bstyle="[^"]*)#[A-F0-9]{6}\b(?=[^"]*")
(?<=\bstyle="[^"]*)
正向向后看,断言style="
后跟 0+ 次出现的任何字符,除了左侧的"
#[A-F0-9]{6}\b
匹配#
和 6 次列出的任何字符,后跟单词边界以防止空匹配(?=[^"]*")
正向前瞻,断言除"
之外的任何字符的 0+ 倍,然后匹配右侧的"
。请注意,这与单词style
匹配,并且不受元素的限制。
匹配括号的方法很脆弱,但这很容易破坏。
(?<=<[^<>]*\bstyle="[^"]*)#[A-F0-9]{6}\b(?=[^"<>]*"[^<>]*>)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.