我想知道为了捕获一个未包含在alt属性中的字符串,需要一个eregi_replace的正则表达式。
e.g。它应该找到并取代John Doe:
“John Doe出生于......”
但是当John Doe在任何标签中找不到/替换时,例如:
<img src="/jd.jpg" alt="John Doe at the beach" />
答案 0 :(得分:1)
如果我想替换“John Doe”,如果它不在标签内,我会这样做:
$str = preg_replace('/John Doe(?![^<>]*+>)/i', $new_name, $str);
(?![^<>]*+>)
是一个负面的预测;它说“如果在这一点之前有任何尖括号,第一个不是一个结束括号。”这不是万无一失的,因为属性值可以包含尖括号,但根据我的经验,他们很少这样做。
正则表达式与HTML根本不兼容;即使使用preg_
套件提供的高级功能,例如lookarounds和possessive quantifiers,您也必须依赖于简化假设,例如属性值中没有尖括号 。我甚至不会在更有限的ereg_
函数中尝试这项工作。
答案 1 :(得分:0)
你已经达到了正则表达式的限制。你需要一个自定义解析器。 标签可以嵌套,正则表达式无法匹配
等模式<b>
<<b>>
<<<b>>>
虽然不匹配
等模式<b>>
<<b>
<<b>>>
等