PHP正则表达式条件返回false

PHP正则表达式条件返回false,php,regex,html-parsing,Php,Regex,Html Parsing,我试图编写一个正则表达式来解析一小段HTML,以便将stort的第一个字母包装在dropcap span中。问题是,我们的编剧通常会在故事的第一个字母前放置图像(向右浮动)。我想我可以编写一个带有条件的正则表达式来检查额外的div,并更改它搜索的内容 这就是事情变得奇怪的地方 以下是我正在测试的文本(有图像): 米佐小姐的米尔顿·卡尼夫画作。由俄亥俄州立大学比利爱尔兰卡通图书馆和博物馆托妮·门德斯收藏馆提供。她身材高大,金发碧眼,坚强但脆弱,与她简略的过去生活在一起,从未见过没有签名风衣的她。从

我试图编写一个正则表达式来解析一小段HTML,以便将stort的第一个字母包装在dropcap span中。问题是,我们的编剧通常会在故事的第一个字母前放置图像(向右浮动)。我想我可以编写一个带有条件的正则表达式来检查额外的div,并更改它搜索的内容

这就是事情变得奇怪的地方

以下是我正在测试的文本(有图像):

米佐小姐的米尔顿·卡尼夫画作。由俄亥俄州立大学比利爱尔兰卡通图书馆和博物馆托妮·门德斯收藏馆提供。

她身材高大,金发碧眼,坚强但脆弱,与她简略的过去生活在一起,从未见过没有签名风衣的她。从1952年开始到1988年去世

她比其他女性的笔墨画更出色,因为她为MU校园的日历、飞机海报、选美比赛和中场活动提供了灵感

这是我写的正则表达式:
()(\w)


现在,我的正则表达式的第一个匹配组查找
第一个p元素是未关闭的元素。

这是一个无效的html代码。迟早你必须解决这个问题。。。也许,一切都正常。

这个正则表达式应该给出文本的第一个字母,无论中间是否有附件:

(<\/p><\/div>(\w))|(<p>(\w))
((\w))|((\w))

它与序列后面的第一个字母或开头标签后面的第一个字母匹配。但是一旦HTML稍微改变一点,这些解决方案就会失败。因此,在
标记中添加一个类或id,正则表达式将停止匹配。对于稳定的解决方案,HTML解析器将是更好的选择。

将HTML用于看似简单的任务似乎是极端的,但HTML可能是极端的。如果您的
变成

怎么办?或者
标记跨越多行?很多人说“使用HTML解析器”的原因是因为我们以前也经历过这种情况,遇到过与您同样的麻烦。

这只是整个HTML的一小部分。看看代码。。。在第一行中,第二个p在第一个p关闭之前是打开的。。。如果你关闭第一个p,regexp将很容易。它可能看起来很极端,但HTML可能很极端。如果您的
变成

怎么办?或者
标记跨越多行?这么多人说“使用HTML解析器”的原因是因为我们以前也这样做过,并且遇到了与您将遇到的相同的麻烦。这个正则表达式应该给您文本的第一个字母,无论中间是否有附件:
(\w))|((\w))
但是一旦HTML稍微改变一点,这些解决方案往往会失败得很惨。@AndyLester谢谢你,我想这就是我们最终要做的。@z80crew请发布一个答案,这样我就可以接受。@z80crew另外,你的正则表达式可以写成
(|)(\w)
,以避免太多的捕获组,但是谢谢你指出我不需要使用条件语句,我只需要一个OR。
(<\/p><\/div>(\w))|(<p>(\w))