【问题标题】:substring with regex for between <tr> tag<tr> 标签之间带有正则表达式的子字符串
【发布时间】:2014-05-29 02:29:04
【问题描述】:

我正在为下面的字符串使用正则表达式。

但总是得到匹配器结果为假。

有什么建议吗?

我想在&lt;tr&gt; and &lt;/tr&gt;.之间进行子串化

Pattern myPattern = Pattern.compile('\\<tr>(.*?)\\</tr>');
Matcher m = myPattern.matcher(temp);
  while(m.find())
   {
.. do things
}

<tr><td>111</td><td>111@test.com</td></tr><tr><td>222</td><td>222@test.com</td></tr></table>

即使我更改为Pattern myPattern = Pattern.compile('&lt;tr&gt;(\\w+)&lt;/tr&gt;');,也无法得到真正的结果。

而且这个仍然无法工作&lt;tr&gt;(.*?)&lt;/tr&gt;。我与http://regexr.com/ 核对,但看起来还可以。但是,当我运行代码时,无法正常工作。

【问题讨论】:

  • 为什么要使用正则表达式?有很多不错的 HTML 解析器可以让你的生活变得更简单。让我们以jsoup.org 为例。你可以使用document.select("tr"),你就完成了。现在您只需要使用选定的信息。
  • 嗨,我在 Salesforce 平台上使用 apex,价值来自于从外部来源获取。

标签: regex salesforce apex


【解决方案1】:

我不使用您正在测试的环境,但由于您必须使用正则表达式,我看到一个可能的问题:. 可以匹配除行分隔符以外的任何字符,因此它不会匹配

<tr>
   <td>..</td>
</tr>

为了让它工作,你可以使用DOTALL标志,所以试试

Pattern myPattern = Pattern.compile("<tr>(.*?)</tr>",Pattern.DOTALL);

【讨论】:

  • 是的,那个...或者双反斜杠也可能有点悬。 +1 :)
【解决方案2】:

试试Pattern myPattern = Pattern.compile("&lt;tr&gt;(.*?)&lt;/tr&gt;");

可运行代码:https://ideone.com/sm0WWg

【讨论】:

  • 这不是编码问题,因为值本身有隐藏的字符,这会造成问题。当它被删除时,问题解决了。谢谢。
  • @kitokid 我们能知道它是哪个值吗?这很有趣,因为. 应该能够匹配除行分隔符之外的任何内容。我认为只有行分隔符是 \n\r。是其他角色吗?
  • @Pshemo,您好,仅供参考。该值是等……即使在记事本中我也看不到。在记事本中,我意识到当我退格 "etc" 时,我需要做两次才能到达 "c" 字符。然后我注意到有问题。在 excel 中,它显示为…。我相信这是原始数据的编码问题。
猜你喜欢
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2017-02-15
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多