【问题标题】:PHP preg_match_all htmlPHP preg_match_all html
【发布时间】:2011-04-12 23:22:15
【问题描述】:

我怎样才能为 php 创建一个 preg_match_all 正则表达式模式来给我这个代码?

<td class="class2">&nbsp;</td>
<td class="class2" align="right"><span class="DarkText">I WANT THIS TEXT</span></td>

要我获取 span 类中的文本? 谢谢!

【问题讨论】:

  • 这是文本字符串中唯一的跨度类吗?
  • xpath 更适合这项任务。
  • 请不要使用正则表达式来解析 HTML。这是一条通往悲伤和破坏代码的道路。

标签: php regex preg-match preg-match-all


【解决方案1】:

你可以使用:

preg_match_all("!<span[^>]+>(.*?)</span>!", $str, $matches);

那么您的文本将在第一个捕获组内(如 rubular 所示)

除此之外,请注意regex shouldn't be used to parse HTML。使用 XML 解析器会更好,除非它真的非常简单。

【讨论】:

  • +1 用于回答并指向最佳解决方案(解析器)。并包含指向 Bobince 著名答案的链接。
【解决方案2】:

你也不能在开始和结束时使用!,而使用更简单的代码T-Regx

$pattern = "<span[^>]+>(.*?)</span>"; // no delimiters :)

$string = '
<td class="class2">&nbsp;</td>
<td class="class2" align="right"><span class="DarkText">I WANT THIS 
TEXT</span></td>
';

那就用match()-&gt;group():

$text = Pattern::of($pattern)->match($string)->group(1)->first();

$text // 'I WANT THIS TEXT'

在线查看:https://regex101.com/r/nxTvS1/1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2015-06-24
    • 2014-01-21
    • 1970-01-01
    相关资源
    最近更新 更多