赢得';在php eregi_replace的alt文本中找不到模式

赢得';在php eregi_replace的alt文本中找不到模式,php,regex,Php,Regex,我想知道eregi_替换需要什么正则表达式来捕获alt属性中不包含的字符串 e、 g.应在以下方面找到并取代John Doe: “约翰·多伊出生于……” 但当John Doe在任何标签中时,不查找/替换,例如: <img src="/jd.jpg" alt="John Doe at the beach" /> 您已经达到了正则表达式的限制。为此,您需要一个自定义解析器。 标记可以嵌套,并且正则表达式不能匹配这样的模式 <b> <<b>> <

我想知道eregi_替换需要什么正则表达式来捕获alt属性中不包含的字符串

e、 g.应在以下方面找到并取代John Doe:

“约翰·多伊出生于……”

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

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

您已经达到了正则表达式的限制。为此,您需要一个自定义解析器。 标记可以嵌套,并且正则表达式不能匹配这样的模式

<b>
<<b>>
<<<b>>>
<b>>
<<b>
<<b>>>

而不是像这样匹配模式

<b>
<<b>>
<<<b>>>
<b>>
<<b>
<<b>>>
>
etc

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

$str = preg_replace('/John Doe(?![^<>]*+>)/i', $new_name, $str);
$str=preg_replace('/John Doe(?![^]*+>)/i',$new_name,$str);
(?![^]*+>)
是一种消极的前瞻;它说“如果在这一点之前有任何尖括号,那么第一个不是结束括号。”这不是万无一失的,因为属性值可以包含尖括号,但根据我的经验,它们很少包含尖括号


正则表达式基本上与HTML不兼容;即使有了
preg\uu
套件提供的高级功能,如和,您也常常不得不依赖于简化假设,如属性值中没有尖括号。我甚至不会尝试使用更有限的
ereg\u
功能来完成这项工作。

它必须是
eregi\u replace
ereg[i].
函数被弃用,取而代之的是功能更强大的
preg.
函数。使用
preg\u replace
可能是可行的。当然……我会使用任何可以完成工作的工具。:-)但如果我们在元素中搜索文本,就不会有嵌套。元素处于零宽度前瞻的整洁使用范围内。