我想匹配这样的每个字符串
<img src="whatever" whatever alt="whatever" whatever height="any number but not 162" whatever />
Run Code Online (Sandbox Code Playgroud)
换句话说,我希望匹配每个字符串,在"链接"之后包含除数字162之外的任何字符串(整数而不仅仅是单个字符).我用这个
function embed($strr) {
$strr = preg_replace('@<img.*src="([^"]+)"(?:[^1]+|1(?:$|[^6]|6(?:$|[^2]))) />@is', '[img]$1[/img]', $strr);
return $strr;
}
Run Code Online (Sandbox Code Playgroud)
但这与包含1而不是162的所有内容都不匹配.我该如何解决?
您也可以使用专门用于从结构化标记文档中提取信息的XPath,而不是正则表达式.要获取文档中不包含162属性的所有img节点,请使用
//img[not(contains(@height, 162))]
Run Code Online (Sandbox Code Playgroud)
我个人认为比正则表达更容易阅读.假设您只是不希望固定高度为162的img节点而不是属性中具有162的所有节点,例如2162或1623等,您可以这样做
//img[@height != 162]
Run Code Online (Sandbox Code Playgroud)
有各种XML/HTML解析器允许您使用XPath.对于一个体面的列表,请参阅