代码之家  ›  专栏  ›  技术社区  ›  Gerrie Schenck

使用“does not end with”regex进行替换:如何避免替换最后一个字符?

  •  1
  • Gerrie Schenck  · 技术社区  · 15 年前

    我正在使用下面的正则表达式

    <a href="[^/]
    

    查找不以斜线开头的所有链接。我想用这个regex的结果替换所有 <a href="somelink.html"> 标签上有 <a href="http://mysite.com/somelink.html"> .

    但我的正则表达式的问题是(在上面的示例中)字符串 <a href="s 替换而不是 <a href=" .

    如何修复此正则表达式以避免将最后一个字符包含在我的匹配项中?

    我正在使用.NET regex库进行此操作。当前具有以下代码:

    content = Regex.Replace(content, "(<a href=\")[^/]", "<a href=\"http://mysite.com/");
    

    也许我应该在那里换点什么?但如果可能的话,我宁愿有一个好的正则表达式,而不是开始玩 SubString 等。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Mark Byers    15 年前

    不要使用regex解析HTML。使用 HTML Agility Pack . 它会让你的生活更轻松。

    如果您坚持使用regex,请尝试否定lookahead:

    <a href="(?!/)
    
        2
  •  0
  •   Dan Andreatta    15 年前

    如果必须使用regex,请在手册中找到一个引用来查找先行断言或等效断言。在Perl中是(?=模式),因此您的模式变为

      <a href="(?=[^/])
    

    如果模式后跟[^/],则它将匹配,而不将其包含在匹配中。