代码之家  ›  专栏  ›  技术社区  ›  jfs

HTML元素属性值中是否允许“>”(U+003E大于符号)?

  •  8
  • jfs  · 技术社区  · 16 年前

    换句话说,可以使用 /<tag[^>]*>.*?<\/tag>/ Regex匹配 tag 不包含嵌套的HTML元素 标签 元素?

    例如(lt.html):

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
      <head>
        <title>greater than sign in attribute value</title>
      </head>
      <body>
        <div>1</div>
        <div title=">">2</div>
      </body>
    </html>
    

    Regex:

    $ perl -nE"say $1 if m~<div[^>]*>(.*?)</div>~" lt.html
    

    和刮网器:

    #!/usr/bin/env python
    import sys
    import BeautifulSoup
    
    soup = BeautifulSoup.BeautifulSoup(sys.stdin)
    for div in soup.findAll('div'):
        print div.string
    
    
    $ python lt.py <lt.html
    

    两者的输出相同:

    1
    ">2
    

    预期输出:

    1
    2
    

    w3c 说:

    属性值是文本的混合物 和字符引用,除了 附加的限制 文本不能包含不明确的 安培。

    7 回复  |  直到 16 年前
        1
  •  9
  •   Kornel    16 年前

    < >

        2
  •  3
  •   Jim os x nerd    16 年前

    ]]>

        3
  •  3
  •   kch    16 年前

    >

        5
  •  2
  •   Troels Thomsen    16 年前

    <tag((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)>.*?<\/tag>

    Html Agility Pack

        6
  •  0
  •   Per Hornshøj-Schierbeck    16 年前
    yeah except /<tag[^>]*>.*?<\/tag>/
    

        7
  •  0
  •   Steven A. Lowe    16 年前