繁体   English   中英

如何仅使用正则表达式从子字符串中获取所有正则表达式匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM