タグC#の正規表現マッチングのhref属性のhtml

   困難な、しかしはっきりと明確な思考を終えすることは必要とされるわけではありません

あなたは必要とする:オンライン正規表現のサイトを:https://regexr.com/

   正規表現の少しの知識

以下は、サンプル入力された変更と言うのはなぜ後に、(最後にEND、私はフレーズが少し=「/フォーラム」のhrefであることが判明し、A HREF =「/フォーラムLLL」を修正することを指摘しています)

<!DOCTYPE html>
<html>
<head>
  <title>Hyperlinks</title>
  <link href="theme.css" rel="stylesheet" />
</head>
<body>
<ul><li><a   href="/"  id="home">Home</a></li><li><a
 class="selected" href=/courses>Courses</a>
</li><li><a href = 
'/forum lll'>Forum</a></li><li><a class="href"
οnclick="go()" href= "#">Forum</a></li>
<li><a id="js" href =
"javascript:alert('hi yo')" class="new">click</a></li>
<li><a id='nakov' href =
http://www.nakov.com class='new'>nak</a></li></ul>
<a href="#empty"></a>
<a id="href">href='fake'<img src='http://abv.bg/i.gif' 
alt='abv'/></a><a href="#">&lt;a href='hello'&gt;</a>
<!-- This code is commented:
  <a href="#commented">commentex hyperlink</a> -->
</body>
END

以下は、入力のための結果があります

私たちは、次のような形でそのhref属性の入力サンプルを見ることができます:

  1. 「XXXX」、任意の文字が発生する可能性があります(スペースや単一引用符を含む)」を除く真ん中、最後の「開始」します。
  2. スタートシンボル明確ありませんが、スペースまたは>エンドに拘束されませ
  3. 'XXXX'、及び "xxxは" 同様に、省略します。

= HREFの後ろに書かれた正規表現を置くことができ、我々はそう。

(("[^"]*")|(\'[^\']*\')|[^>^\s]+))

注:この正規表現は一見「XXX」の形で表現されていない、とフォームが「XXX」を見ていない、いない場合は、この時間は、直接的な方法マッチングターミネータ>またはスペースに直接、2の形式で記述されています。

この順序は、最初の2に変更することができますが、第三は、前二者の場合は、一致するだけでなく、その第三試合は、第1または第2の位置に直接行くことができないで、それ以外の場合は、することをしてくださいノートエラー、この変更の場合:

(("[^"]*")|[^>^\s]+|(\'[^\']*\'))

それはスペース「XXX」内の、停止する試合は、それは文字を欠いていることにスペースが含まれている場合は、「XXX」の項目は、第二部で照合されます。

あなたがしたい場合は、[^> ^ \ s]は+または最初の途中で、の必要性:

(([^'^">^\s]+)|("[^"]*")|(\'[^\']*\'))

つまり、このに、「アイテムと」で注意を払うと一致していないと、正規表現を書いて最初は異なっている、つまり、この場合には、フォーム2のために、正規表現は、二重のフォームの中央に表示されない2単一引用符、及び以下に示すように、以前に可能でした

最初の正規表現の場合:

(("[^"]*")|(\'[^\']*\')|[^>^\s]+))

3番目の正規表現の場合:

(([^'^">^\s]+)|("[^"]*")|(\'[^\']*\'))

異なるの最後の行に注意してください。

 

もちろん、このサンプルでは、​​実際のHTMLテキストを与え、上記の状況ではありませんので、2つのことができます

下面解释一个<a 和href之间的字符如何表达。

可以从上面的图片中看到是这样的:

<a([^\>]+|\s+)href

即在a和href之间可以出现多个空格和非>的字符,因为可能出现a标签中没有href的情况,此时会匹配到>末尾结束,不符合条件。

href 和=之间可以有0或多个空格,=和属性值之间同样如此。

所以有整个的正则表达式如下:(注意我在这个字符串前面使用了@,所以""表示")

string pattern = @"\<a([^\>]+|\s+)href\s*=\s*((""[^""]*"")|(\'[^\']*\')|[^>^\s]+)";

得到MatchCollection之后,再得到最后一部分,再对开头结尾的双引号和单引号处理一下,就能得到之前图片中的结果。

注意我稍微修改了输入文件中这句a href = '/forum lll' 原来是a href = '/forum',是因为我最开始根本没看到有单引号的项,我只做了形式1和2,但是对于没改之前的输入文件是可以得到正确结果的,因为'/forum' 满足形式2,以空格结束,但是我想还是用正规的思想进行一遍。

然后我这个思路是在做完之后进行整理的,也就是从最关键的地方说起到底怎么做,我们实际在做的过程中,完全不必先这样,可以先只是匹配完整的a标签(<a xxxxx>),然后再观察href的特性,再去解决,慢慢地在网站上更改,直到逻辑和结果都是正确的

发布了32 篇原创文章 · 获赞 5 · 访问量 4663

おすすめ

転載: blog.csdn.net/qq_38941327/article/details/89278425