在eregi_replace的alt文本中找不到模式的正则表达式

时间:2009-07-31 02:33:33

标签: php regex

我想知道为了捕获一个未包含在alt属性中的字符串,需要一个eregi_replace的正则表达式。

e.g。它应该找到并取代John Doe:

“John Doe出生于......”

但是当John Doe在任何标签中找不到/替换时,例如:

<img src="/jd.jpg" alt="John Doe at the beach" /> 

2 个答案:

答案 0 :(得分:1)

如果我想替换“John Doe”,如果它不在标签内,我会这样做:

$str = preg_replace('/John Doe(?![^<>]*+>)/i', $new_name, $str);

(?![^<>]*+>)是一个负面的预测;它说“如果在这一点之前有任何尖括号,第一个不是一个结束括号。”这不是万无一失的,因为属性值可以包含尖括号,但根据我的经验,他们很少这样做。

正则表达式与HTML根本不兼容;即使使用preg_套件提供的高级功能,例如lookaroundspossessive quantifiers,您也必须依赖于简化假设,例如属性值中没有尖括号 。我甚至不会在更有限的ereg_函数中尝试这项工作。

答案 1 :(得分:0)

你已经达到了正则表达式的限制。你需要一个自定义解析器。 标签可以嵌套,正则表达式无法匹配

等模式
<b>
<<b>>
<<<b>>>

虽然不匹配

等模式
<b>>
<<b>
<<b>>>