2

我需要使用 RegEx 提取 HTML 标记的内容。我正在搜索的正文如下所示:

<div class="content">
    The Price is <script type="text/javascript">document.write(123())</script>
</div>

我尝试使用此表达式,但失败了。我需要提取“document.write(123())”

(?s)<div class="content">[^<]*<script type="text/javascript">(.*?)</script></div>

如何修改我的表达以获得我所追求的?

4

3 回答 3

1

您的正则表达式存在几个问题:

  • 是什么(?s)
  • 你没有考虑和之间的</script>空间</div>
  • 正斜杠 ( /) 我认为需要转义,即\/

这似乎有效(演示):

<div class="content">[^<]*<script type="text\/javascript">(.*?)<\/script>[^<]*<\/div>
于 2013-03-05T20:07:43.580 回答
1

你只是忘了考虑和之间的<script>空间<div>

(?s)<div class="content">[^<]*<script type="text/javascript">(.*?)</script>\s*</div>

于 2013-03-05T20:08:38.963 回答
1

使用正则表达式从 HTML 中提取内容无疑是一种疯狂的做法。这比使用 Regex 验证电子邮件地址的想法更糟糕。

如果您使用的是 C#/.NET,我可以推荐HtmlAgility 包,它在从任何 HTML 中提取内容方面做得非常好(StackOverflow 上有一个很好的答案,显示了如何使用它)。

如果您正在使用其他技术,只需寻找做同样事情的替代库 - 您肯定会发现其他人已经解决了这个问题。

于 2013-03-05T20:09:25.157 回答