【问题标题】:PHP preg_match not returning correct arrayPHP preg_match 没有返回正确的数组
【发布时间】:2015-03-02 11:15:56
【问题描述】:

所以我一直在阅读正则表达式,我在 youtube 上使用了一个很好的教程,它解释得很好,所以我决定尝试一些使用 http://www.phpliveregex.com/ 的方法,它在网站上效果很好,但在我的 php 代码中却没有。

所以我想要的是在一些 html 代码中找到获胜者的名字。我正在浏览的这个网站只是为了测试目的,只在我的本地机器上运行^^

<span style="width: 45%; float: left; text-align: left">
  <div class="team" style="float: left; margin-right: 10%; background: url('http://cdn.csgolounge.com/img/teams/Cloud9.jpg?41')"></div>
  <b>Cloud9 (win)</b><br><i>84%</i>      </span>

所以我首先要做的是整理出一个单词和一个空格和(win)被包围的。我这样做:

preg_match("<b>\w+\s\D\w\w\w\D</b>", $comment1, $comment2);

$comment1 是 html 代码。

然后我再次 preg_match 以检索获胜者的姓名:

preg_match("[a-zA-Z]\w+", $comment2[0], $comment3);

然后我通过回显comment2 [0]来完成

我在 phpliveregex 上试过这个,效果很好。但是在我的网站上,comment2[0] 没有显示任何内容。

我将 html 代码插入到本地网站上的一个框中,然后将其传递给我的代码(我已经检查并确认这是有效的。

感谢您的帮助!

【问题讨论】:

  • 不是整个解决方案,但您应该在第一个正则表达式中转义 &lt;/b&gt; 中的斜线:&lt;\/b&gt;。这是第一个在您的网站上不起作用的正则表达式吗?
  • 奇怪的是我告诉 PHP 将结果放在 comment2 中。但是评论 2 是空的。相反,comment1 具有 comment2[0] 中应该包含的内容。此外,这种变化似乎没有产生任何影响。

标签: php html arrays regex preg-match


【解决方案1】:

您必须在正则表达式周围添加分隔符:

preg_match("~<b>\w+\s\D\w\w\w\D</b>~", $comment1, $comment2);

preg_match("~[a-zA-Z]\w+~", $comment2[0], $comment3);

【讨论】:

  • 你能解释一下分隔符有什么区别吗(除了解决我的问题)?
  • @Thomja:奇怪,它对我来说很好用。对于具有函数preg_xxxx 的正则表达式,分隔符是强制性的。看看php.net/manual/en/function.preg-match.phpregular-expressions.info/index.html
  • 它也对我有用。我只是调用了错误的变量。我看到有不同的分隔符,我使用哪一个有关系吗?
  • @Thomja:通常标准分隔符是/,但当正则表达式中存在分隔符时,使用另一个分隔符很有用。对你来说就是这种情况,/ 存在于&lt;/b&gt; 中,使用~ 可以防止逃避/
猜你喜欢
  • 1970-01-01
  • 2017-07-08
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 2011-07-10
  • 2012-02-23
相关资源
最近更新 更多