【问题标题】:Regex match multiple meta tags in multi line string正则表达式匹配多行字符串中的多个元标记
【发布时间】:2016-09-20 21:52:56
【问题描述】:

我想验证一个多行字符串是否只包含我指定格式的元标记。例如,它只能包含以下一项或多项:

<meta property="og:[anything]" content="[anything]"/>

其中 [anything] 可以是 0 个或多个任意字符。

元标记可能会或可能不会被换行符分隔,所以这也可以:

<meta property="og:[anything]" content="[anything]"/>
<meta property="og:[anything]" content="[anything]"/>
<meta property="og:[anything]" content="[anything]"/>

这是我当前的正则表达式:

^(?:<meta [^>]*property=[\"']og:.+[\"'] [^>]*content=[\"']([^'^\"]+?)[\"'][^>]*>)(?:\n*)$

如果标签在同一行,或者标签带有换行符,它可以工作,但不适用于多行标签。

如何让它匹配这些元标记,无论是单行还是多行?

【问题讨论】:

  • 我想我能够让它工作,需要一个“一个或多个”组本身:^(]*property=[\"']og:. +[\"'] [^>]*content=[\"']([^'^\"]+?)[\"'][^>]*>\s*)*$
  • Obligatory comment pointing out that you shouldn't parse HTML with regex。更有用的是——当你说anything 时,这真的是任何东西吗?可以将property 属性中的[anything] 替换为例如" content="blag"/&gt;\r\n,因为如果这样,您将走向痛苦的世界。
  • @Jeff - 在这种情况下,这是我唯一的选择。这是一个带有文本区域字段的 CMS,强制验证的唯一方法是使用正则表达式。
  • 这很酷,只要你知道你要进入什么 :) 听起来这可能不是你需要认真处理恶意的领域,在这种情况下,几乎- 解决方案可能没问题。

标签: html regex regex-greedy


【解决方案1】:

^(?:\s*&lt;meta\s*property=["']og:.+?["']\s*content=["'].+?["']\s*\/&gt;\s*)+$怎么样

见:https://regex101.com/r/iJ7fT8/2

【讨论】:

  • 我尝试了类似的方法,但是如果还插入了无效的东西,它似乎是有效的,即: invalid //dangerous stuff
  • @drogon 哦,我想我误解了你的要求,现在试试吧
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多