正则表达式不应与特定数字匹配

时间:2011-09-12 10:24:48

标签: php regex

我想匹配像这样的每个字符串

<img src="whatever" whatever alt="whatever" whatever height="any number but not 162" whatever />

换句话说,我希望匹配每个字符串,在“链接”包含除数字162之外的任何字符串(整数而不仅仅是单个字符)。 我用这个

function embed($strr) {
    $strr = preg_replace('@<img.*src="([^"]+)"(?:[^1]+|1(?:$|[^6]|6(?:$|[^2]))) />@is', '[img]$1[/img]', $strr);
 return $strr;
}

但这与包含1而不是162的所有内容都不匹配。我该如何解决?

2 个答案:

答案 0 :(得分:5)

除了正则表达式,您还可以使用专门用于从结构化标记文档中提取信息的XPath。要获取文档中不包含162属性的所有img节点,请使用

//img[not(contains(@height, 162))]

我个人认为比正则表达式更容易阅读。假设您只是不希望固定高度为162的img节点而不是属性中具有162的所有节点,例如2162或1623等,你可以做到

//img[@height != 162]

有各种XML / HTML解析器允许您使用XPath。有关合适的列表,请参阅

答案 1 :(得分:2)

您可以使用像这样的负面预测

height="(?!162)([^"]+)

here on Regexr

(?!162)是一个负向前瞻,它确保“162”不会跟随此位置,但它与之不匹配。

我不确定你想要匹配什么,但我认为你明白这一点。