【问题标题】:Regex for broken links with whitespaces带有空格的断开链接的正则表达式
【发布时间】:2015-10-21 21:25:50
【问题描述】:

我正在使用这个正则表达式

private static final String HREF_PATTERN = 
    "\\s*(?i)href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">\\s]+))";

获取链接
 <a href=www.example.com/1234 5678>

网址格式错误。它包含一个空格。问题是我想获得包括“5678”在内的整个链接,但我只获得“www.example.com/1234”。

我不太擅长正则表达式。有人可以提供一个有效的正则表达式,以便我可以获得整个网址“www.example.com/1234 5678”。

谢谢

【问题讨论】:

  • 为什么 URL 会包含空格?通常将空格转换为%20
  • URL 是从另一个我无法编辑的程序创建的
  • 然后用 %20 替换 withespaces 并为有效的 url 保留正则表达式
  • 你不能在引号内提供网址并从里面获取吗?
  • 试试"\\s*(?i)href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\"&gt;]+))"。除非您的 &lt;a&gt; 标记包含其他属性,否则这将捕获整个 href 值。或者,您可以在下一个属性名称之前使用前瞻停止:(?i)\\s*href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\"&gt;]+(?=\\s+\\w+=|&gt;)))

标签: java regex href


【解决方案1】:

外部程序创建一个带有多个 &lt;a href=www.example.com/1234 5678&gt; 标记的 html 电子邮件。

假设您无法在源代码级别修复它,您可以尝试使用正则表达式修复它。

如果href 属性是唯一的属性,您就不必关心= 之后的空格。从您的模式中删除\\s,它将起作用。

private static final String HREF_PATTERN = 
   "(?i)\\s*href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">]+))";
                                                     ^

如果您有带值的属性,则必须使用前瞻:

private static final String HREF_PATTERN = 
    (?i)\\s*href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">]+(?=>|\\s+\\w+=)))

regex demo

但是,这不适用于nofollow 之类的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2020-08-29
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多