【发布时间】: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"/>\r\n,因为如果这样,您将走向痛苦的世界。 -
@Jeff - 在这种情况下,这是我唯一的选择。这是一个带有文本区域字段的 CMS,强制验证的唯一方法是使用正则表达式。
-
这很酷,只要你知道你要进入什么 :) 听起来这可能不是你需要认真处理恶意的领域,在这种情况下,几乎- 解决方案可能没问题。
标签: html regex regex-greedy