【问题标题】:Regex .* expression extracts only a part of the characters I want to extract?正则表达式 .* 表达式仅提取我要提取的部分字符?
【发布时间】:2013-07-18 17:46:55
【问题描述】:

我有这个字符串:

rder=3D"0" width=3D"650">=0D=0A <tr>=0D=0A <td valign=3D"top">=0D=0A <p>=0D=0A <strong>Hi Mike Tyson</strong>,<br/>=0D=0A =

我想从字符串中提取Mike Tyson。上面的字符串中除了名称之外的所有内容始终相同,所以我的第一个线索就是使用这个正则表达式:

[^rder=3D"0" width=3D"650">=0D=0A <tr>=0D=0A <td valign=3D"top">=0D=0A <p>=0D=0A <strong>Hi ].*[^<\/strong>,<br\/>=0D=0A =]

但是,这会输出 Mike Ty 而不是 Mike Tyson。有什么想法吗?

【问题讨论】:

  • 你能给出完整的 html 代码吗?
  • 你不了解字符类的使用。看看这个链接:regular-expressions.info/charclass.html
  • 这个非常流行的问题和第一个答案概括地概括了如何接收到 HTML 的正则表达式:stackoverflow.com/questions/1732348/… - TL;DR:你会在几个地方侥幸逃脱,但只要它开始花费您的时间来调试、停止和获取 HTML 解析器(Ruby 的 nokogiri 很好)来完成您的工作

标签: ruby regex html-parsing


【解决方案1】:

方括号使整个匹配成为一个字符类

这个表达式将匹配 Mike Tyson

(?&lt;=rder=3D"0" width=3D"650"&gt;=0D=0A &lt;tr&gt;=0D=0A &lt;td valign=3D"top"&gt;=0D=0A &lt;p&gt;=0D=0A &lt;strong&gt;Hi ).*?(?=&lt;\/strong&gt;,&lt;br\/&gt;=0D=0A =)

实时示例:http://www.rubular.com/r/OaK2ZmbSPh

【讨论】:

  • 谢谢,但我想避免匹配组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
相关资源
最近更新 更多