regex帮助-php

regex帮助-php,php,regex,Php,Regex,可能重复: 如果你们中间有一位正则表达式大师能帮助我,我将不胜感激 我想创建一个php函数,用于转换html标记/元素,如下所示: 我想皈依 <span class="heading1">Any generic text, or other html elements such as <p> tags</p> in here</span> 到 …因此,基本上我想将跨距标题转换为适当的h1标记这是为了更好地搜索引擎优化,但可能还有其他我想保留的正

可能重复:

如果你们中间有一位正则表达式大师能帮助我,我将不胜感激

我想创建一个php函数,用于转换html标记/元素,如下所示:

我想皈依

<span class="heading1">Any generic text, or other html elements such as <p> tags</p> in here</span>

…因此,基本上我想将跨距标题转换为适当的h1标记这是为了更好地搜索引擎优化,但可能还有其他我想保留的正常跨距标记


有什么想法吗?提前谢谢。

正如上面的评论所指出的,这可能不是一个好主意。但是,由于这种情况非常简单,如果您想生活在边缘,正则表达式将非常简单:

preg_replace('/<(\/*)span/', '<${1}h1', $htmlFile);
如果我的计算是正确的,这将忽略heading1 span标记内的任何匹配span标记集


不过,使用DOM解析器可能还是更好。

Wow。正当我确实读过很多关于regex的问题,但它们对我来说并没有多大好处,因为regex就像双重荷兰语,显然我的问题是一个特殊的问题。我现在意识到这是一个愚蠢的问题。我以前从未听说过html解析器。我现在正在读这个博客,感谢你为我指出了正确的方向。DOM示例:谢谢,这很好。。。除了我认为,如果我在原来的头1跨度内有另一个跨度,像这样:一些其他的东西…那么你的函数将替换第一个闭合跨度,而不是对应于头1跨度的跨度,对吗?如果是这样的话,我想我最好读一读html解析器:除非你能在你的代码中添加另一个狡猾的东西来处理这个问题?!谢谢你的帮助,我很感激。现在你明白为什么事情很快就失控了。采纳上面的建议,使用DOM解析器。我确实这样做了。不管怎样,谢谢你的帮助。去他妈的,我们开始吧。我只是想看看我能不能。哈哈,干得好,克里斯祖玛-不过,您的代码中似乎有一个小错误,我必须删除最后一个反斜杠,所以将部分更改为“也许您可以编辑”?除此之外,工作就像一个魅力!非常感谢!因此,完整的函数将是preg_replace'/.*.*/'、'${1}'、$htmlFile;
preg_replace('/<(\/*)span/', '<${1}h1', $htmlFile);
preg_replace('/<span class="heading1">(.*(.*<span.*>.*<\/span>.*)*.*)<\/span>/', '<h1 class="heading1">${1}</h1>', $htmlFile);