<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      記一次修改dotnet-cnblogs圖片路徑的正則匹配規則

      本工具作者大佬的GitHub

      前言

      ??因為最近一時心血來潮,學了markdown,我覺得但凡是個人,對于不用wordhtml就可以有不錯的排版,而且使用起來簡單便捷,都會投向markdown的懷抱中的。又因為正好寫通信作業的報告,所以乘手就當練習markdown的用法了,所以本地寫完了,感覺排版還可以。又一時心血來潮,打開了許久未打開的cnblogs,果然用戶名忘了。費一番功夫,進去之后看到簡潔的網站界面,一條條的技術文檔,我覺得但凡是個人,都會有成為他們中一員的沖動吧,本來我的初心也是如此,我決定重操初心,用一篇篇可觀的markdown來填充我的blog,用一篇篇可觀的markdown來記錄我的daily life。
      ??既然要上傳,那么圖片元素是必不可少的,一開始不知道有工具,就先把寫好的markdown復制進網站的編輯器里,然后圖片問題只能一張張手動上傳了,果然懶惰才是第一生產力,上傳幾張就受不了了,果斷bing了一下,嘿,還是有好心人士的,我選擇了donet-cnblogs,畢竟命令行工具才是精致強悍,滿懷期待的用了,然后就是這樣:

      我的md文件里圖片樣例是這樣的:

      這就是這篇文章存在的前提了。

      我該怎么辦

      ??網上也只有基本的使用方法,于我而言沒有用,于是我直接去了大佬的GitHub的項目去看看有沒有收獲(似乎正常情況下,GitHub白天可以正常訪問,但晚上就訪問不了了)。項目說明也只是基本的使用方法,我在猶豫要不要看源碼,因為我這個菜雞甚至連git都不會用。
      ??現在問題是,我不明白問題出在哪里,也就意味著不知從何解決。我注視著紅色的提示文字,"提取圖片成功,共0個",我在想,你到底是怎么提取的呢?所以我決然的去找源碼去了,我就想知道你是怎么提取圖片地址的。也得虧是大佬,文件名和函數名都是能直觀知道功能的,所以不負所望,在文件dotnet-cnblogs-tool/src/dotnet-cnblogs/TagHandlers/ImageHandler.cs中發現了一段代碼

      public class ImageHandler : ITagHandler
          {
              private const string MatchRule = @"!\[.*?\]\((.*?)\)";
      					//正則匹配圖片本地地址
              public List<string> Process(string content)
              {
                  var result = new List<string>();
      
                  var matchResult = Regex.Matches(content, MatchRule, RegexOptions.IgnoreCase | RegexOptions.RightToLeft);
      
                  foreach (Match match in matchResult) result.Add(match.Groups[1].Value);
      
                  return result;
              }
          }
      

      可以看到那邊有個正則匹配的規則,原來只支持markdown的圖片鏈接形式![example.png](/example.png),而我的圖片鏈接形式是<img src="/example.png">這種html的格式,我是因為可以方便調節大小和位置,所以選擇這種方式,但沒想到會不匹配。

      解決

      C#的編譯問題

      ??既然知道的問題所在,那么直接開搞,然后就又卡住了,我不會C#,就算這段代碼相對簡單,就改個匹配規則就可以了,可是改過之后怎么生成exe可執行文件呢?又是網上一頓搜,我原本想在Visual Studio里面搞的,可是一看安裝要10+G的空間,還有很大一部分在C盤,我直接放棄了。終于還是VS Codeyyds啊,直接安裝一個C#插件搞定。然后我把項目下載下來,用VS Code打開整個項目,就是到項目文件夾下,然后右鍵,選擇從VS Code打開。然后意料之外,情理之中,文件全飄紅,發現全是命名空間的引用問題,其實相當于C語言中的include的路徑問題,得配置一下插件中的dotnet的路徑,也很奇怪,我網上搜這個問題的時候并沒有提到路徑什么的,但是就是突然想到我還沒配置插件,然后大概瀏覽了一下,配置內容,發現dotnet path路徑是空的,還有一個Sdk Path也是空的,也得虧用這個命令行工具時要安裝這個我到現在不知道具體的dotnet是個什么東西的時候,我看到了幾個關鍵詞:dotnet,.NET Sdk,然后這個過程又是沒有間隔多少時間,才讓我一看到這幾個路徑就想到了,所以同志們啊,當天事當天做,乘題而入,方可解啊。這兩個路徑配好之后就可以了F5編譯了,然后VS Code會自動生成.vscode,bin,obj目錄,生成的exe就在,bin目錄下的\Debug\net5.0目錄里。

      代碼編寫問題

      ??以上只是解決了編譯問題,然后接下來就是代碼問題了。原本以為改下正則匹配規則就行了,然后在一個在線正則測試網站RegExr來測試正則表達式,最后確定為(?<=img src=)\".*?\",然后就是報錯表達式無效,真真是淦了,網站測的好好的,到你這就不行了。然后又是搜,才知道C#中使用正則要匹配",得使用""。然后改過后的表達式為(?<=img src=)"".*?""。然后就是編譯,運行,可把我牛逼壞了,然后就是光速打臉:

      這個結果為什么和我測試的不一樣啊,為什么出現了width="80%"的字樣,不應該啊,還有為什么其中的單單的文件路徑也顯示未發現文件呢,我百思不得其解。于是我又對比了原本的規則,發現原本圖片鏈接的格式為![example.png](./example.png)這樣的格式,他沒有""號。也就是說,我需要修改正則匹配規則,要直接提取路徑,然后在線試了好久,實在能力有限了,吃奶勁都使完了也沒試出來,tnnd,真難啊。然后就打算分兩步取路徑,就是前面的正則表達式取過后,然后再用正則表達式(?<="")(.*?)(?="")再取一次。所以需要修改一下for循環的代碼。然后又遇到新問題了,我對代碼里面的Regex.Matches函數知之甚少,都不知道返回的是什么,哎,又得搜。又在一個在線測試C#的網站菜鳥工具測試我的正則匹配規則,然后修改后的代碼為:

      public class ImageHandler : ITagHandler
          {
              // private const string MatchRule = @"!\[.*?\]\((.*?)\)";
              private const string MatchRule = @"(?<=img src=)"".*?""";
              private const string MatchRule2 = @"(?<="")(.*?)(?="")";
      
              public List<string> Process(string content)
              {
                  var result = new List<string>();
                  var matchResult = Regex.Matches(content, MatchRule, RegexOptions.IgnoreCase|RegexOptions.RightToLeft);
                  
                  foreach (Match match in matchResult) {
                      // Console.WriteLine("Found '{0}' at position {1}",match.Value,match.Index);
                      foreach(Match m in Regex.Matches(match.Value,MatchRule2)){
                          result.Add(m.Value);
                          Console.WriteLine(m.Value);
                      }
                          
                  }
      
                  return result;
              }
          }
      

      然后就是又一頓編譯運行,吐了,還是不行。

      圖注:中間調試運行結果

      所以到底那個鬼width="80%"為什么出現,為什么我在線測試都是好的,包括在線C#測試也是好的,咋了,瞧不起人唄,md,我還就不信邪了。然后又是不斷的試,想著怎么改正則匹配規則,我一直以為是正則的問題,所以換了幾個匹配規則,但是都不起效果,就在我想要放棄的時候,我突然想到,我在線測試的代碼中用的函數是這樣的
      Regex.Matches(input, pattern)
      而我的代碼是這樣的
      Regex.Matches(content,MatchRule,RegexOptions.IgnoreCase|RegexOptions.RightToLeft);
      參數多了幾個正則的參數,我第一反應就是最后這個參數有問題,然后刪掉之后,果然就可以了,md,淦。
      最后成功的代碼:

      public class ImageHandler : ITagHandler
          {
              // private const string MatchRule = @"!\[.*?\]\((.*?)\)";
              private const string MatchRule = @"(?<=img src=)"".*?""";
              private const string MatchRule2 = @"(?<="")(.*?)(?="")";
      
              public List<string> Process(string content)
              {
                  var result = new List<string>();
                  var matchResult = Regex.Matches(content, MatchRule, RegexOptions.IgnoreCase);
                  
                  foreach (Match match in matchResult) {
                      // Console.WriteLine("Found '{0}' at position {1}",match.Value,match.Index);
                      foreach(Match m in Regex.Matches(match.Value,MatchRule2)){
                          result.Add(m.Value);
                          Console.WriteLine(m.Value);
                      }
                          
                  }
      
                  return result;
              }
          }
      

      運行結果:

      圖注:白色為調試結果

      ???紅色為執行結果

      小結

      1. markdown非常棒
      2. 當天事當天做,不要拖
      3. 努力去嘗試
      4. 多寫文檔,多做總結
      posted @ 2022-07-07 21:13  pie_thn  閱讀(98)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久婷婷五月综合97色直播| 成在人线AV无码免观看| 鹤山市| 久久综合伊人77777| 久久人人爽人人爽人人av| 激情综合网激情综合| 性人久久久久| 亚洲AV无码AV在线影院| 成人久久精品国产亚洲av| 亚洲日韩AV秘 无码一区二区 | 夜夜添狠狠添高潮出水| 日本乱子人伦在线视频| 精品人妻伦一二三区久久| 色吊丝中文字幕在线观看| 亚洲中文字幕av天堂| 亚洲卡1卡2卡3精品| 亚洲高清成人av在线| 五月丁香啪啪| 国产精品夜夜春夜夜爽久久小说| 少妇高潮激情一区二区三| 国产伦码精品一区二区| 海安县| 日韩午夜福利片段在线观看| 精选国产av精选一区二区三区| 一本精品99久久精品77| 国产成人无码A区在线观看视频 | 高清偷拍一区二区三区| 97久久超碰亚洲视觉盛宴| 少妇高潮激情一区二区三| 四虎库影成人在线播放| 国产精品午夜福利小视频| 霞浦县| 国产精品多p对白交换绿帽| 中国性欧美videofree精品| 国产偷国产偷亚洲高清午夜| 一区二区三区鲁丝不卡| 欧美精品亚洲精品日韩专区| 国产精品不卡一区二区视频| 日韩av片无码一区二区不卡| 18禁午夜宅男成年网站| 亚洲国产精品午夜福利|