下面是我的正则表达式代码:
Name:<\/h5>.*?<div class="info-name">(.*?)(<a|<\/div|\|)
字符串
内容如下:
<h5>Name:</h5>
<div class="info-name">
Josh Taguibao
</div><a class="t0 profile" >Click to view Profile</a>
型
我可以得到我的输出,
Josh Taguibao
型
但是,如果内容发生了类似这样的变化:
<h5>Name:</h5>
<div class="info-name">
Josh <a href="#tagclan">Taguibao</a>
</div><a class="t0 profile" >Click to view Profile</a>
型
我只能得到 * 乔什**而不是整个名字。
我可以问一下在我的代码中添加什么吗?
2条答案
按热度按时间8xiog9wr1#
HTML是结构化数据。这意味着有工具可以解析它。Regex不是这个工作的工具。
http://php.net/manual/en/book.dom.php
juzqafwq2#
如果您不想使用html解析器(SO社区强烈建议您随时使用),您可以只匹配和剥离标记:
代码:(PHP Demo)(Pattern Demo)
字符串
输出量:
型
~
用作模式定界符,因此模式中的/
s不需要转义。\K
表示:“从此处开始全字符串匹配”(?=...)
是一个正的lookahead,用于在匹配</div
或|
后面的换行符之前停止全字符串匹配(通常我会写(?=\s(?:</div>|\|))
,但实际上它的步骤更少)s
修饰符/标志允许.
(点)另外匹配新的行。DomDocument不是我的强项,但我将这个片段拼凑在一起,它将用于您的示例文本。(DomDocument Demo)
型
nodeValue
和textContent
实际上是相同的(无论如何,对于本例),因为它们都从div元素返回无标记文本。手册内容:textContent此节点及其子代的文本内容。
或者,如果您需要隔离第一个出现的元素,该元素的类为
info-name
,则可以使用XPath:(Demo)型